3
int arr[5] = {0,1,2,3,4};
vector<int> vec;

通常、私たちは次のことを行います:

vector<int> vec(arr, arr + sizeof(arr) / sizeof(int));

しかし、 arrの最初の 3 つの値だけでベクトルvecを初期化するにはどうすればよいでしょうか? また、中間の 3 つの値で初期化するにはどうすればよいですか?

複数行ではなく、すぐに初期化する必要がありpush_backます..

4

1 に答える 1

15

呼び出しているコンストラクタ フォームは次の**です。

template <class Iterator> vector(Iterator start, Iterator end);

したがって、イテレータのペアのように機能するものは何でも渡すことができます。具体的には、2 つのポインターが同じ配列を指し、2 番目のポインターが最初のポインターの前に来ない限り、2 つのポインターを渡すことができます (ポインターが等しい場合、それらは空の範囲を表します)。

あなたの例では、配列の最初の要素へのポインターと、配列の (神話上の) 要素の後の要素へのポインターを渡します。

vector<int> vec(arr, arr + sizeof(arr) / sizeof(int));

一般に、開始として任意の要素へのポインターを渡し、終了として任意の要素を通過するポインターを渡すことができます。

しかし、arr の最初の 3 つの値だけでベクトル vec を初期化するにはどうすればよいですか?

最初の要素と 3 番目の要素の 1 つ前の要素へのポインターを渡します。

vector<int> vec(arr, arr+3);

また、中間の 3 つの値で初期化するにはどうすればよいですか?

コピーする最初の項目へのポインターを渡し、最後の要素を貼り付けるポインターを渡します。この場合、インデックス 1 と 4:

vector<int> vec(arr+1, arr+4);


**わかりました、それよりも少し複雑ですが、この議論のためにふりをしても問題ありません。実際のフォームは次のとおりです。template <class InputIterator> vector( InputIterator first, InputIterator last, const Allocator& alloc = Allocator() );

于 2012-04-24T14:00:41.797 に答える