vectorのresizeで困惑していることがありますので質問します。
例えば、
vector<int> n(3);
n[0] = 1;
n[1] = 2;
n[2] = 3;
n.resize(2);
とした場合、n[2]の内容は自動で破棄されるのでしょうか。
訂正します
n[2]の内容とn[2]が使用していたメモリは自動で破棄されるのでしょうか。
されます。そうでないと使えないし。
# 実際は次にpush_backされたときの再利用のため溜め込んでるんじゃないかな。
vector::resize でサイズを n に変更する場合で、
Effective STL 第14項 1行目から引用:
n が現在のサイズより小さい場合、コンテナの末尾にある要素は破棄される。
と、あります。
># 実際は次にpush_backされたときの再利用のため溜め込んでるんじゃないかな。
vector でガバッとメモリを確保してからゴソッと vector::resize して要素を減らして
も、やっぱり vector::capacity の内容は変わりませんでした。
επιστημηさん
DD.さん
参考になりました。
どうもありがとうございます。
解決のチェックをいれるのを忘れてました
>># 実際は次にpush_backされたときの再利用のため溜め込んでるんじゃないかな。
> vector でガバッとメモリを確保してからゴソッと vector::resize して要素を減らして
> も、やっぱり vector::capacity の内容は変わりませんでした。
でしょうね。ガバッと確保した連続領域をちびちび解放するすべがありませんから。
