2017-05-09 4 views
0

縮小する - 再割り当てが発生する可能性がありますが、ベクトルサイズに影響はなく、要素を変更することはできません。私の意見でshink_to_fitは再配置を起こしますか?

、容量()は(いつものサイズよりも大きい場合)、私たちは、だから、再配分が必要とされることはありません

deallocate(finish_, endOfStorage_ - finish_); 
endOfStorage_ = finish_; 

を使用してそれを行うことができます。私の意見は間違っていますか?

+3

メモリのチャンクが割り当てられました。どのようにあなたはそれの一部の割り当てを解除することができますか? – songyuanyao

+0

ありがとうございます。あなたの答えの前に私は混乱しました。 – zwfars

答えて

4

C++標準ライブラリのアロケータモデルは、メモリの部分的な割り当て解除を許可していません。 10 Tに十分なスペースを割り当てた場合、そのスペースの割り当ては1つだけです。割り当ての一部を削除することはできません。あなたはそれのすべての割り当てを解除することができます。

したがって、shrink_to_fitが容量を変更しようとしている場合、再割り当てを実行することによってのみ行うことができます。短期的に答えるために

+0

ご協力ありがとうございます。 :) – zwfars

0

.. はい再配分

は、未使用の容量を除去することを要求します起こすshrink_to_fit。 capacity()をsize()に減らすことは、拘束力のない要求です。要求が満たされた場合、実装に依存します。 再割り当てが発生した場合、過去のイテレータを含むすべてのイテレータと、その要素へのすべての参照が無効になります。再割り当てが行われない場合、反復子または参照は無効になりません。

関連する問題