std::vector
新しいメモリを割り当ててデータをコピーする代わりに、既存のデータを使用してを作成できますか?
より明確にするために、メモリ領域 (C 配列または別のベクターの一部など) があり、それにベクターのようなアクセスを提供したい場合、ベクターを作成して、このメモリ ブロックを使用するように指示できますか? ?
いいえ。ただし、これを行う独自のクラスを作成することはできます。これはかなり一般的なニーズであるため、他の誰かがすでにこれを行っていても驚かないでしょう。
ただし、通常のC ++の方法は、イテレータを操作するためのテンプレートコードを記述することです。ベクトルの任意の部分、またはC配列の任意の部分(およびその他の多く)に対してイテレーターを作成できます。したがって、イテレータのテンプレートコードを作成することは、おそらくあなたがすべきことです。
を作成するときにカスタム アロケータを使用できるため、vector
技術的には可能です。
ただし、お勧めしません。固定サイズのベクトルを作成するだけで(明らかにそれを手に入れることができます)、使用しますstd::copy
。
コンテナーを反復処理するアルゴリズムは、入力範囲を定義する反復子のペアを受け入れます。大きなコンテナの中央を指すイテレータでアルゴリズムを使用できます。
例:
std::vector<int> big_vector(100000);
// initialize it
//...
std::sort(big_vector.begin()+100, big_vector.begin()+200); // sort a subrange
int big_array[100000]; //c-style array
// initialize it
//...
std::sort(std::begin(big_array)+300, std::begin(big_array)+400); // sort a subrange