将 stringstream 转换为 stl 容器

converting stringstream to stl containers

我想将一些字符串流转换为矢量,但在转换过程中我丢失了所有空格。

class Wrapper {
public:
    vector<char> data;
    Wrapper(std::stringstream &s) {
        std::cout << s.str();  //output: 22 serialization::archive 16 0 0 2
        for (char c; s >> c;)
            data.push_back(c);

        std::cout << '\n';
        for (auto i = data.begin(); i != data.end(); ++i)
            std::cout << *i; // output: 22serialization::archive1600222
    }
};

...

new Wrapper(stream);

而且我的对话方式看起来也不优雅。有更好的方法吗?

Some programmer dude 评论中所述,operator>> 默认跳过空格。

可以使用适当的重载和几个 std::istreambuf_iterator 直接从 std::stringstream 构造 std::vector<char>

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

int main(void)
{
    std::stringstream ss;
    ss << 22 << " serialization::archive " << 16 << ' ' << 0 << ' ' << 0 << ' ' << 2;

    std::vector<char> data {
        std::istreambuf_iterator<char>(ss),
        std::istreambuf_iterator<char>(),   // <- default-constructed end of stream iterator
    };

    // it outputs: 22 serialization::archive 16 0 0 2
    for (auto i = data.begin(); i != data.end(); ++i)
        std::cout << *i;
}