在c++中分离流

Separating streams in C++

本文关键字:分离 c++      更新时间:2023-10-16
    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。

问题是由于std::copy的工作方式。

第二个参数标记了停止复制的位置,你的参数

istream_iterator<float>()

表示"流的结尾"。copy的第一个调用正在读取整个流。

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

从评论

:

是否也有使用copy的第二个参数来获得三个数字的方法?

这正是它的作用。对于一些数字n,如果要复制n值,请使用std::copy_n