求和向量v中的所有项目

时间:2018-03-31 02:59:21

标签: c++ templates vector

我正在尝试在学习模板后完成编程挑战。方向是:

  

写一个函数。

     

T accum(向量v)

     

形成并返回传递给它的向量v中所有项的“总和”。例如,如果T是数字类型(如int或double),则返回数字和,如果T表示STL字符串类型,则返回连接结果。

     

注意:对于任何类型T,表达式T()将生成由默认构造函数创建的值或对象。例如,如果T是字符串类,则T()产生空字符串对象。如果T表示数字类型(如int),则T()得到0.使用此事实初始化“累加器”。

     

使用驱动程序测试您的函数,该程序要求用户输入三个整数,使用accum计算总和,并打印出总和。该程序要求用户输入三个字符串,使用accum来连接字符串,并打印结果。

这就是我所拥有的:

#include "stdafx.h"
#include<iostream>
#include<vector>
#include<string>


using namespace std;

template <typename T>
T accum(vector <T> v) {
    T sum;

    for (auto iter = v.begin(); iter != v.end(); iter++) {
        sum += *iter;
    }
    return sum;
}

int main()
{
    vector<int> vec;
    int intInput;
    vector<string> myStrings;
    string strInput;

    cout << "Enter 3 number to be added together." << endl;
    for (int i = 0; i < 3; i++) {
        cout << "Enter number " << i + 1 << endl;
        cin >> intInput;
        vec.push_back(intInput);
    }
    cout << accum(vec) << endl;

    cout << "Enter 3 words to be concantinated." << endl;
    for (int i = 0; i < 3; i++) {
        cout << "Enter word " << i + 1 << endl;
        cin >> strInput;
        myStrings.push_back(strInput);
    }
    cout << accum(myStrings) << endl;

    return 0;
}

我收到错误:

  

未初始化的局部变量“sum”使用。

我尝试了其他方法,例如使用at()。如何为这两种数据类型实现此目的?

1 个答案:

答案 0 :(得分:2)

为确保sum初始化为默认值,您可以执行以下操作:

T sum = {};

 T sum = T();