12

std::vector新しいメモリを割り当ててデータをコピーする代わりに、既存のデータを使用してを作成できますか?

より明確にするために、メモリ領域 (C 配列または別のベクターの一部など) があり、それにベクターのようなアクセスを提供したい場合、ベクターを作成して、このメモリ ブロックを使用するように指示できますか? ?

4

3 に答える 3

7

いいえ。ただし、これを行う独自のクラスを作成することはできます。これはかなり一般的なニーズであるため、他の誰かがすでにこれを行っていても驚かないでしょう。

ただし、通常のC ++の方法は、イテレータを操作するためのテンプレートコードを記述することです。ベクトルの任意の部分、またはC配列の任意の部分(およびその他の多く)に対してイテレーターを作成できます。したがって、イテレータのテンプレートコードを作成することは、おそらくあなたがすべきことです。

于 2012-10-31T09:52:05.457 に答える
2

を作成するときにカスタム アロケータを使用できるため、vector技術的には可能です。

ただし、お勧めしません。固定サイズのベクトルを作成するだけで(明らかにそれを手に入れることができます)、使用しますstd::copy

于 2012-10-31T09:50:34.870 に答える
1

コンテナーを反復処理するアルゴリズムは、入力範囲を定義する反復子のペアを受け入れます。大きなコンテナの中央を指すイテレータでアルゴリズムを使用できます。

例:

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
于 2012-10-31T10:00:13.453 に答える