1

ポインターが無効になる危険を冒さずに、コンテナー内のアイテムへの参照またはポインターを安全に格納する最善の方法を理解するのに少し苦労しています。

アイテムがいつ再割り当てstd::vectorされて新しいメモリ ロケーションに移動されるかわからないため、これは一般的には悪い考えのように思えます。vectorそのような方法はありますか?

listdeque、代わりにこれはより良いオプションですか? 私が理解していることから、これらのコレクション内のアイテムは移動されないので、特定の要素のメモリ アドレスへのポインタを取得できますか?

私は Objective-C から来ています。Objective-C はほとんどすべてのポインタを使用しているため、この種のことは簡単で、すべてのコンテナで一般的です。

4

3 に答える 3

3

の場合std::vector、メンバー関数を使用reserveして、必要な要素の最大数に対して連続したメモリ ブロックを事前に割り当てることができます。これは、予約容量を超えない限り、要素がコピーされないことを意味します。

要素を挿入または消去すると、a 内の要素へのすべてのポインターstd::dequeも無効になります。ただし、 astd::listは、消去する要素へのポインター以外のポインターをこれらの状況で無効にしないことが保証されています。

于 2013-05-08T11:58:00.273 に答える
0

リストは、任意の場所で挿入および消去し、双方向に繰り返すことができるシーケンス コンテナーです。ベクトルと比較したリストの主な欠点は、位置によって要素に直接アクセスできないことです。

Deques もシーケンス コンテナーです。両端で拡大または縮小できる動的サイズが付属しています。これらは vector に非常に似ており、位置によって要素に直接アクセスできます。

自問する必要があります: コンテナに対してどのような操作を行う必要があるか?

list と forward_list は、操作時にコンテナの有効性を保持しますが、deque はコンテナを無効にすることに注意してください。

C++ のコンテナーの詳細については、http: //www.cplusplus.com/にアクセスしてください。

于 2013-05-08T12:02:09.177 に答える