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;
}
}
这应该将一行中的前三个数字排序为一个向量,将最后三个数字排序为另一个向量。然而,由于我怀疑流是如何工作的,所有数字都进入向量v1,没有进入v2。输入是一个ifstream。
答案 0 :(得分:2)
问题是std::copy
的工作原理。
第二个参数标记停止复制的位置和参数
istream_iterator<float>()
表示“流的结束”。 <{1}}的第一次调用正在读取整个流。
使用std::copy_n
代替复制特定数量。
来自评论:
还有一种方法可以使用复制的第二个参数来获得三个数字吗?
这正是它的用途。对于某些数字 n ,如果要复制 n 值,请使用copy
。