C++ 如何将数字列表从字符串复制到C++;矢量

C++ 如何将数字列表从字符串复制到C++;矢量,c++,c++11,vector,stl,stringstream,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_i

我有一个字符串,比如:

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>());
而我想

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));
string line=“6148,72,35,0,33.6,0.627,50,1”;
向量行;
istringstream iss{line};
复制(istream_迭代器(iss)、istream_迭代器()、back_插入器(行));

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

如果您的
字符串正确,您可以使用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 5中修复了,所以我们就快到了。

std::replace(line.begin(),line.end(),',','iss
之前,比如@PiotrS。就在现场。现在我想知道,有没有办法避免替换?类似于将分隔符定义为
?@AdriC.S。对不过,就你的情况而言,我认为替换者更可取:@JonathanMee,我明白了!谢谢你的链接@阿德里克·S。是的,如果设置
istream
s以在CSV中读取是您必须做的很多事情,那么您可以制作一个
const ctype::mask
,并在任何地方使用它。但是,如果只是这一个地方,我会站在
replace
一边,因为老实说,使用
ctype::mask
是没有人会做的事情,这会让你的代码很难理解。
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>()};
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>()};