我正在编写一个实用函数,它将获取一个元素向量(可以是字符串、整数、双精度浮点数、字符),将它们连接成一个单一的字符串并返回。代码如下:
template<typename T>
std::string convert2Str(std::vector<T> const& vec)
{
std::ostringstream sStream;
for (size_t k=0; k<vec.size(); ++k) {
sStream << vec[k] << " ";
}
return sStream.str();
}
我希望将此函数更加通用:
- 首先,使用迭代器而不是使用索引来访问
vector<T>
。在循环之前,我尝试使用std::vector<T>::const_iterator it = vec.begin()
,但编译器报错: : error: expected;
before it 当我将上述定义更改为std::vector<std::string>::const_iterator it = vec.begin()
时,错误消失了。因此,看起来我没有遵循正确的语法,请告诉我正确的语法。 - 其次,通过使第一个参数与容器无关,使函数更加通用。对于任何容器(
vector
、list
、queue
、deque
等),我想要执行与上述相同的操作。我尝试在stackoverflow上搜索此内容,但没有找到令人满意的答案。
typename
关键字。typedef只是用来简化转换为通用容器(T
和container
仍然被定义,但我切换了哪一个作为模板参数)。 - Ben Voigt.
。但是你可能想要声明一个类型为T
的局部变量,比如T sum = *it + 5;
。 - Ben Voigt