【问题标题】:writing a function sumVector : not returning a value编写函数 sumVector :不返回值
【发布时间】:2012-02-16 13:13:47
【问题描述】:

我正在练习向量类的函数。我编写了一个函数“sumVector”来将向量“ages”的所有元素相加,但它没有返回总数 我正在复制我的代码块;我知道 STL 提供了 sum 函数,但这是为了我自己的练习。如果有人能指出我做错了什么,我将不胜感激

    #include <vector>
    #include <fstream>
    #include <sstream>
    #include <iostream>
    #include <iterator>
    #include <algorithm>
    using namespace std;
    template<typename T>
    int sumVector(const vector<T> &integers2)
    {
         typename vector<T>::const_iterator constIterator;
         //display vector elements using constIterator
         for 

         (constIterator=integers2.begin();                                             
         constIterator!=integers2.end();++constIterator);
         int sum=0;
         sum+=*constIterator;
         return sum;
         cout<<sum;
    }




    int main ()
    {
    vector<int> ages;
    vector<float>var;
    ifstream inFile;
    inFile.open("data.txt");
    if(!inFile)
    {
        cout<<"didn't work";
        cin.get();
        exit (1);
    }

    string line;
    getline(inFile, line);
    istringstream in(line);
    copy(std::istream_iterator<int>(in),
      std::istream_iterator<int>(),
      std::back_inserter(ages));
    cout<<ages.at(2)<<endl;
    getline(inFile, line);
    istringstream gin(line);
    copy(istream_iterator<float>(gin),
                                     istream_iterator<float>(),
                                     back_inserter(var));
    cout<<var.at(0)<<endl;
    cout<<"whats the sum";
    sumVector (ages);

    cin.get();

    inFile.close();
    cin.get();

    }

【问题讨论】:

  • 确实格式错误的代码,调试打印,coutreturn 之后?
  • 标准库函数accumulate 就是这样做的。

标签: c++ function vector


【解决方案1】:

for 循环不正确,cout &lt;&lt; sum 出现在来自 sumVector()return 之后。返回类型(和sum 的类型)也应该是T,否则sumVector() 仅限于vectors 的int 元素(或可转换为ints 的类型)。

我认为您正在寻找以下内容:

template<typename T>
T sumVector(const vector<T> &integers2)
{
    typename vector<T>::const_iterator constIterator;
    T sum=0;
    //display vector elements using constIterator
    for (constIterator=integers2.begin();
         constIterator!=integers2.end();
         ++constIterator)
    {
        sum+=*constIterator;
    }

    cout<<sum;
    return sum;
}

考虑不将sumVector() 内的sum 的值打印为(IMO),这样更清楚:

cout << "whats the sum: " << sumVector(ages);

还可能需要将sumVector() 的结果存储在变量中,并且在计算总和时不向标准输出写入任何内容。

【讨论】:

    【解决方案2】:

    “;”在 for 错误之后 - 您编写它的方式,分号将是 for 循环的主体。

    我没有碰你的命名(例如 integers2 有点烦人)。

    template<typename T>
    int sumVector(const vector<T> &integers2)
    {
         int sum=0;
         typename vector<T>::const_iterator constIterator;
         //display vector elements using constIterator
         for (constIterator=integers2.begin();constIterator!=integers2.end();++constIterator) {
    
             sum+=*constIterator;
         }
         cout<<sum;
         return sum;
    }
    

    我也重新排序了

    • 和的printreturn,因为返回端是函数的执行。
    • i=0的初始化也必须在循环之前完成。

    【讨论】:

      猜你喜欢
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 2013-07-09
      • 2011-06-12
      • 2022-11-22
      • 1970-01-01
      • 2018-11-23
      相关资源
      最近更新 更多