如何将数字列表从字符串复制到 C++ 向量
How to copy a list of numbers from a string to a C++ vector
我有一个像这样的字符串:
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() 仅将第一个数字从字符串复制到向量,即我得到
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() 将字符串中的每个数字复制到向量中吗?
如果你的 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 中得到修复,所以我们快完成了。
我有一个像这样的字符串:
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() 仅将第一个数字从字符串复制到向量,即我得到
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() 将字符串中的每个数字复制到向量中吗?
如果你的 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 中得到修复,所以我们快完成了。