4

次のようなコードを使用しています。

const int MY_SIZE = 100000;
std::vector<double> v;
v.reserve(MY_SIZE);

// add no more than MY_SIZE elements to the vector

f(v);    
v.clear();

// again, add no more than MY_SIZE elements to the vector

f(v);
v.clear();

//
// etc...
//

私のコードのポイントは、 を格納してから、それらの要素MY_SIZE doubleに対して操作を実行することです。f(std::vector<double>)ベクトルをいっぱいにして操作を実行した後、すべての要素を取り除き (そしてstd::vector::size()0 にリセット)、さらに要素を追加したいと考えています。ただし、ここで重要なのは、ベクトルに割り当てられたメモリ内のスペースを変更したくないということです。

MY_SIZE以上の要素をに追加するつもりはないvので、vによって割り当てられたよりも多くのメモリを再割り当てする必要はないことに注意してくださいv.reserve(MY_SIZE)

したがって、上記のコードを呼び出すと、によって割り当てられたスペースの量またはのメモリ内の場所にv.clear()何らかの影響がありますか?v.reserve(MY_SIZE)v.begin()


関連する質問: を呼び出した場合、 によって割り当てられたスペースの量または のメモリ内の場所にv.erase(v.begin(),v.begin()+v.size())何らかの影響がありますか?v.reserve(MY_SIZE)v.begin()

本当にすべての要素を消去したいだけなら、 を呼び出しますclear()。しかし、この関連する質問について疑問に思っているのは、 の最初の X 要素のみを消去する必要がある場合がありv、これらの場合、によって割り当てられたメモリを保持したいので、の場所を変更しv.reserve(MY_SIZE)たくないからです。v

4

1 に答える 1