C++:将向量转换为字符串流

19

我想知道是否可以使用通用编程将std::vector转换为std::stringstream,并且如何实现这样的操作?


那些看起来是完全不相关的类型。 - Michael Mrozek
@Michael Mrozek:所以我应该将向量的内容分配给stringstream。 - Alerty
请更明确地定义"transform"的含义。应该将什么插入stringstream中?是vector元素吗?它们应该以某种方式分隔吗? - Brian Neal
2个回答

42

参考 Brian Neal 的评论,下面的代码只有在 std::vector 中的对象(在本例中是 std::string)定义了 << 运算符时才能起作用。

#include <iostream>
#include <sstream>
#include <vector>
#include <string>
#include <iterator>

 // Dummy std::vector of strings
 std::vector<std::string> sentence;
 sentence.push_back("aa");
 sentence.push_back("ab");

 // Required std::stringstream object
 std::stringstream ss;

 // Populate
 std::copy(sentence.begin(), sentence.end(),std::ostream_iterator<std::string>(ss,"\n"));

 // Display
 std::cout<<ss.str()<<std::endl;

1
+1的关键是要使用std限定符来限定copy和ostream_iterator。 :) - Skurmedel
1
你不会给予怀疑的好处吗?使用namespace std是在方法开头吗?!!! :) - Robben_Ford_Fan_boy
1
可能还是保持一致比较好 :) - Jacob
1
不不不!它必须转换向量! - Edward Strange
2
@Noah:哈哈,你是建议改变基础还是施魔法药水呢? :) - Jacob
显示剩余2条评论

16

如果向量的元素类型支持 operator<<,可以考虑使用以下代码:

std::vector<Foo> v = ...;
std::ostringstream s;
std::copy(v.begin(), v.end(), std::ostream_iterator<Foo>(s));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接