0
    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;    
            }
        }

これは、行の最初の 3 つの数値を 1 つのベクトルにソートし、最後の 3 つの数値を別のベクトルにソートすることになっています。ただし、ストリームの仕組みの性質上、すべての数値がベクトル v1 に入り、v2 には何も入っていないと思われます。入力は ifstream です。

4

1 に答える 1

2

問題は仕組みによるものstd::copyです。

2番目のパラメーターは、コピーを停止する場所をマークし、パラメーターは

istream_iterator<float>()

「流れの終わり」を表します。への最初の呼び出しcopyは、ストリーム全体を読み取ります。

std::copy_n代わりに、特定の数量をコピーするために使用します。

コメントから:

copy の 2 番目のパラメーターを使用して 3 つの数値を取得する方法もありますか?

まさにそのためです。数値nについて、 n値をコピーする場合は、 を使用しますstd::copy_n

于 2013-04-04T18:14:45.483 に答える