2012-11-05 4 views
5

こんにちは私はベクトルのようにインデックスを付けることができるが、ベクターのようにメモリ内の古い要素を移動しないstlコンテナが必要ですresizeまたはreserve(私はすべての要素、それは私のためには良くない)。 (私は要素へのバインドを扱うので、これらの要素のアドレスは決して変わらないと思います)。だから私はこのくせを見つけました。あなたはそれがこの目的のために良いと思いますか?重要:私はプッシュバックだけが必要ですが、必要に応じてコンテナを小さな塊で成長させる必要があります。私の要素(C++)をstque deque reallocateしますか?

答えて

10

std::deque要素の後ろまたは前に要素を追加または削除するときに "ポインタや参照を無効にしない"ので、要素がそのまま残っている場合はpush_backとなります。

+0

ありがとうございます!サイズを変更せずにプッシュバックを使用できますか?サイズ変更は要素を移動させる可能性があります。 – user1132655

+0

@ user1132655:確かに、単に 'push_back'。なぜあなたは 'サイズ変更'が必要だと思いますか?それは私にとって早すぎる最適化のように思えます。 –

+0

申し訳ありませんが、私は尋ねたかったのですが、サイズ変更で最適化が要素を変更する可能性があるので、この場合は使用しないでください。 – user1132655

3

the documentationを注意深く読んでいるように、最初または最後に挿入する限り、ポインタは無効にならず、ポインタの無効化はデータがコピーまたは移動されていることを示すものです。

構成方法は、リンクされたリストとは異なります。各要素は個別に割り当てられますが、パフォーマンス上の理由からおそらくリンクされた配列のセットです。中間の要素の順序を変更するには、データを移動する必要があります。

+2

配列の配列によく似ています。リンクされた配列は、リンクされたリストよりはるかに優れたトラバーサルを提供しますが、ランダムアクセスはありません。 – Puppy

関連する問題