0

たとえば、5つの要素を持つポインタの配列(いっぱい)があり、2番目の位置に別の要素を挿入したい場合は、別の配列(size + 1)を割り当て、古い配列から最初の要素をコピーして、挿入する必要があります。新しい要素を作成し、残りの要素をコピーします。このアプリケーションはスペースを無駄にすることはできません。これまでのコードは次のとおりです。

Sometype **newArray=new Sometype*[++Count];
size_t s=sizeof(Array);
memcpy(newArray,Array,s*position);
newArray[position]=new Sometype();
memcpy(newArray+position+1,Array+position,s*(Count-position-1));

delete [] Array;
Array=newArray;

これは私のアプリケーションのボトルネックであるため、これを行うためのより効率的な方法はありますか?私はc ++を初めて使用するため、高度な情報はわかりません。この目的でベクトルを使用できますか?サイズを変更すると、以前の使用済みスペースの2倍のスペースが必要になることをどこかで読んだと思います。これは本当ですか、それともこの動作を変更できますか?

4

2 に答える 2

3

標準のコンテナ、、、をstd::vectorstd::liststd::unordered_setくださいstd::unordered_map

于 2012-10-02T12:53:43.370 に答える
3

スペースを無駄にすることができず、シーケンシャルコンテナに固執する必要がある場合は、これが最も効率的な方法だと思います。しかし、私はまだあなたがスペースを無駄にすることができないと信じています。後でさらに5つの要素を追加する必要があると事前に予測できる場合は、配列のサイズを最初から変更する方がはるかに効果的です。いずれにせよ、このひどいCスタイルのコードを避け、意図をより明確にするために、vectorを使用する必要があります。関数を確認することをお勧めします。サイズ変更時にベクトルが以前の2倍になるかどうかは指定されておらず、実装によって異なります。std::vector<T>::reserve()

于 2012-10-02T12:56:21.613 に答える