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
ます..
呼び出しているコンストラクタ フォームは次の**です。
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() );