用C ++分隔流

时间:2013-04-04 18:11:01

标签: c++ sorting input vector

    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。

1 个答案:

答案 0 :(得分:2)

问题是std::copy的工作原理。

第二个参数标记停止复制的位置和参数

istream_iterator<float>()

表示“流的结束”。 <{1}}的第一次调用正在读取整个流。

使用std::copy_n代替复制特定数量。

来自评论:

  

还有一种方法可以使用复制的第二个参数来获得三个数字吗?

这正是它的用途。对于某些数字 n ,如果要复制 n 值,请使用copy