c++ - 如何将数字列表从字符串复制到 C++ vector

标签 c++ c++11 vector stl stringstream

我有一个像这样的字符串:

string line="6,148,72,35,0,33.6,0.627,50,1";

我想将其中的数字复制到 std::vector 的各个元素。 我想使用 std::vector.assign() 或 std::copy()。

所以我写道:

string line="6,148,72,35,0,33.6,0.627,50,1";
vector<double> row;
istringstream iss { line };
row.assign(istream_iterator<double>(iss), istream_iterator<double>());

但结果是 assign() 仅将第一个数字从字符串复制到 vector ,即我得到

row={6}

虽然我想得到

row={6,148,72,35,0,33.6,0.627,50,1}

如果我改用 std::copy 也是一样的,比如:

string line="6,148,72,35,0,33.6,0.627,50,1";
vector<double> row;
istringstream iss { line };
copy(istream_iterator<double>(iss), istream_iterator<double>(), back_inserter(row));

看起来从字符串中读取第一个数字后就结束了,我不知道为什么。知道如何使用 assign() 或 copy() 将字符串中的每个数字复制到 vector 中吗?

最佳答案

如果您的 string 正确,您可以使用 Visual Studio 2013 在一行中完成所有这些:

string line="6,148,72,35,0,33.6,0.627,50,1";

std::replace(line.begin(), line.end(), ',', ' ');

vector<double> row{istream_iterator<double>(istringstream(line)), istream_iterator<double>()};

注意 gcc 有一个 bug移动 istream 所以你必须在 gcc 上这样做:

string line="6,148,72,35,0,33.6,0.627,50,1";

std::replace(line.begin(), line.end(), ',', ' ');

istringstream bar(line);

vector<double> foo{istream_iterator<double>(bar), istream_iterator<double>()};

谢天谢地,该错误已在 gcc 5 中得到修复,因此我们快要完成了。

关于c++ - 如何将数字列表从字符串复制到 C++ vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28219712/

相关文章:

java - 使用Java根据mysql表中的值计算值

c++ - 函数返回空集

C++ 函数循环和 if 语句不起作用

c++ - notify_all 不唤醒等待线程

c++ - 我将如何在 C++ 中实现处理器调度模拟器?

r - 在向量中上下移动数字

C++文件处理读函数错误

c++ - 将 0 写入二进制文件 C++

c++ - 使用可变模板参数的构造函数和函数

c++ - 如何从 std::regex_error 获取解释性字符串?