6

これは、次のように配列からベクトルを作成できることを示しています。

// the iterator constructor can be used to construct from arrays:
int myints[] = {16,2,77,29};
vector<int> myvector (myints, myints + sizeof(myints) / sizeof(int) );

コンストラクターの2番目の引数はなぜmyints + sizeof(myints) / sizeof(int)ですか?

4

3 に答える 3

10

式 は、配列sizeof(myints) / sizeof(int)内の要素の数を取得します。myints

myints配列の最初の要素へのポインタを取得します。

したがって、式は配列myints + sizeof(myints) / sizeof(int)の終わりを1つ超えたポインターであり、これはの2イテレーターコンストラクターが期待するものです。これにより、元の配列のすべての要素のコピーを含むベクトルが作成されます。myintsstd::vector

ポインタはイテレータであるため、上記は次のようになります。

vector<int> myvector (std::begin(myints), std::end(myint));
于 2012-09-26T20:47:20.080 に答える
1

最後の要素の後にintへのポインタを取得します。つまり、begin()とend()のようになります

于 2012-09-26T20:50:38.880 に答える
1
sizeof(myints) / sizeof(int) 

配列内の要素の数です。

myints + sizeof(myints) / sizeof(int)

配列の終わりを1つ過ぎたメモリ位置を示します。

STLは、最初の要素にイテレータを使用し、最後から1つを使用して範囲を指定します。ベクトルコンストラクターはそのような範囲を使用しています。

于 2012-09-26T20:51:56.483 に答える