【问题标题】:C++: vector to stringstreamC++:向量到字符串流
【发布时间】:2011-03-01 18:54:47
【问题描述】:

我想知道是否可以使用泛型编程将 std::vector 转换为 std::stringstream 以及如何完成这样的事情?

【问题讨论】:

  • 那些看起来完全不相关的类型
  • @Michael Mrozek:所以我应该将向量的内容分配给字符串流。
  • 请进一步定义“转换”的含义。应该在字符串流中插入什么?向量元素?是否应该以某种方式分隔它们?

标签: c++ string stl vector stringstream


【解决方案1】:

根据 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 唯一的关键是 copy 和 ostream_iterator 应该用 std 限定。 :)
  • 你不会怀疑 using namespace std 是在方法的开头吗?!!! :)
  • 大声笑,还不如保持一致:)
  • 不不不!它必须变换向量!
  • @Noah:大声笑,你建议改变基础还是魔药:)?
【解决方案2】:

如果向量的元素类型支持运算符

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

【讨论】:

    猜你喜欢
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2020-09-04
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多