1

次のコードで v.resize(n) を呼び出すと、プログラムは0 0 0 0 0 0 0 0 0 0を出力しますが、これは私が見たかったものではありません。ただし、 v.resize(n) を含む行をコメントアウトすると、0 1 2 3 4 5 6 7 8 9が出力されます。これは、私が見たかったものです。これはなぜですか?ここで私の論理の何が問題になっていますか?

#include <iostream>
#include <vector>

using namespace std;

int main( int argc , char ** argv )
{
    int n = 10;
    vector<int> v;
    v.resize(n);

    for( int i=0 ; i<n ; i++ )
    {
        v.push_back(i);
    }

    for( int i=0 ; i<n ; i++ )
    {
        cout << v[i] << " ";
    }

    cout << endl;

    return 0;
}
4

3 に答える 3

5

v.push_back(i)そのベクトルの最後の要素の値をv使用して、ベクトルのサイズを 1増やします。iそのため、10 個のゼロがベクトルの先頭 (つまり先頭) に保持されます。

v[i] = i代わりに書くべきです。

何をするにしても、メモリの再割り当てのために、ベクトルを部分的にサイズ変更するのは最適ではないため、行v.resize(n);を削除して保持しないでください。push_back(そのstlようなプログラミングのための最適化は適切に行われますが、それに依存しないことをお勧めします)。

于 2013-09-11T08:17:00.477 に答える