4

から一連の要素を取得する必要がありますstd::vector。Python スライス オペレータに似ています。

range = vector[0:n]

明らかな方法は、必要な要素を繰り返し処理することです。他に良い方法はありますか?

4

3 に答える 3

9

vector のコンストラクタの 1 つは次のとおりです。

template <class InputIterator>
vector ( InputIterator first, InputIterator last, const Allocator& = Allocator() );

したがって、必要な反復子を渡す新しいベクトルを作成するだけで済みます。

于 2012-11-09T14:00:23.680 に答える
4

vector<T>範囲を識別する 2 つのイテレータを取るコンストラクタがあります。

例:

std::vector<int> range( &v[0], &v[0]+n );

配列内の要素へのポインターは反復子のように動作するため、vが通常の配列であり、 ではない場合でも、これは機能することに注意してください。vector

于 2012-11-09T14:01:17.987 に答える
2

C++ の世界では、範囲を使用する代わりに反復子が使用されます。イテレータは、特定の要素を指すコンテナへのインデックスです。したがって、イテレータを先頭に取得するには を使用vec.begin()し、イテレータを取得するにはnを使用しますvec.begin() + n。これを繰り返したい場合は、単純に行うことができます

for (atd::vector<Foo>::iterator it = vec.begin(); it != vec.begin() + n; ++it)

新しいベクターを作成したい場合は、Luchian が次のように言及しているコンストラクターを使用できます。

std::vector<Foo> vec2(vec.begin(), vec.begin() + n)
于 2012-11-09T14:03:38.290 に答える