コードのスニペットがあり、最初にいくつかの値をに入れてから、std::vector
次のように、それらを使用するオブジェクトの1つにそれぞれのアドレスを指定します。
std::vector < useSomeObject > uso;
// uso is filled
std::vector < someObject > obj;
for (int i=0; i < numberOfDesiredObjects; ++i){
obj.push_back(someObject());
obj.back().fillWithData();
}
for (int i=0; i < numberOfDesiredObjects; ++i){
uso[i].setSomeObject(&obj[i]);
}
// use objects via uso vector
// deallocate everything
さて、私は時々スタイルフリークなので、これは醜いと思います。次のように、forループを1つだけ使用したいと思います。
for (int i=0; i < numberOfDesiredObjects; ++i){
obj.push_back(someObject());
obj.back().fillWithData();
uso[i].setSomeObject(&obj.back());
}
もちろん、再割り当てが時々発生し、設定したすべてのポインタが無効になったため、それはできません。
だから、私の質問はstd::vector.reserve()
、あなたがどれだけ必要になるかを知っていて、事前にメモリを割り当てたいのであれば、それが進むべき道であることを知っています
。で事前に十分なメモリを割り当てようとしていることを確認した場合reserve()
、それは私のポインタが有効なままであることを保証しますか?
ありがとうございました。
サイドノート。 これも同様の質問ですが、知りたいことに対する答えはありません。この質問への最初のコメントとしてポップアップしないようにするためです。