11

このメンバー関数は、標準では定義された効果がなく(備考のみ)、再割り当てが許可されていない場合、使用が制限されます。しかし、私が標準で見つけた、適用されると思われる唯一の段落は23.2.1/11です。

「特に指定されていない限り(明示的に、または他の関数に関して関数を定義することによって)、コンテナメンバー関数を呼び出したり、ライブラリ関数への引数としてコンテナを渡したりしても、その中のオブジェクトへのイテレータが無効になったり、オブジェクトの値が変更されたりすることはありません。容器。"

再割り当てはイテレータを無効にするので、これは、shrink_to_fitが正式に再割り当てできないことを意味しますか?その場合、この関数は、容量の削減が再割り当てされない実装にのみ影響を与える可能性があります...

4

1 に答える 1

9

私は同意します、意図は明らかにshrink_to_fit()再割り当てできることなので、イテレータを無効にすることを許可する必要があります。

realloc()実装が、ブロックを縮小するときにメモリを移動しないことを保証するアロケータに同様の機能を提供し、イテレータを無効にしない場合にのみ、要求を受け入れることができます。しかし、ベクトルに最近追加された要件によって示されるように、それTが意図されているとは思いませんMoveInsertable。その要件は、要素が新しい場所に移動された場合にのみ関連し、イテレータが無効になるためです。

イテレータを無効にする可能性のある問題を明確にするために、問題を提出する必要があると思います。shrink_to_fit()この問題は、、およびに適用さbasic_stringdequeますvector

于 2012-12-17T11:14:58.233 に答える