int n = 1;
//Lines 14 to (vertices+13) read
while (i<(vertices+14))
{
//First three numbers on each line put into "v1"
if (n < 4)
{
copy(istream_iterator<float>(input),
istream_iterator<float>(),
back_inserter(v1));
n++;
}
//Last three numbers on each line put into "v2"
else
{
copy(istream_iterator<float>(input),
istream_iterator<float>(),
back_inserter(v2));
n++;
if (n > 6)
{
i++;
n=1;
}
}
这应该将一行中的前三个数字排序到一个 vector 中,将最后三个数字排序到另一个 vector 中。然而,由于我怀疑流的工作方式的性质,所有数字都进入 vector v1,没有一个进入 v2。输入是一个 ifstream。
最佳答案
问题是由于如何std::copy
有效。
第二个参数表示复制到哪里停止,还有你的参数
istream_iterator<float>()
表示“流的结尾”。对 copy
的第一次 调用是读取整个流。
使用std::copy_n
而不是复制一定数量。
来自评论:
Is there also a way of using the second parameter of copy to get three numbers?
这正是它的用途。对于一些 n 数,如果您想复制 n 值,请使用 std::copy_n
。
关于c++ - 在 C++ 中分离流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15818603/