我正在尝试在学习模板后完成编程挑战。方向是:
写一个函数。
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()
。如何为这两种数据类型实现此目的?
答案 0 :(得分:2)
为确保sum
初始化为默认值,您可以执行以下操作:
T sum = {};
或
T sum = T();