から一連の要素を取得する必要がありますstd::vector
。Python スライス オペレータに似ています。
range = vector[0:n]
明らかな方法は、必要な要素を繰り返し処理することです。他に良い方法はありますか?
vector のコンストラクタの 1 つは次のとおりです。
template <class InputIterator>
vector ( InputIterator first, InputIterator last, const Allocator& = Allocator() );
したがって、必要な反復子を渡す新しいベクトルを作成するだけで済みます。
vector<T>
範囲を識別する 2 つのイテレータを取るコンストラクタがあります。
例:
std::vector<int> range( &v[0], &v[0]+n );
配列内の要素へのポインターは反復子のように動作するため、v
が通常の配列であり、 ではない場合でも、これは機能することに注意してください。vector
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)