resizeとreserveの違い2018年1月29日公開2018年9月22日更新resize()とreserve()の違い。一言で言うと、end()の位置が違う。あと、resizeするとその個数分のコンストラクタが走る。それぞれのend()の位置end()の位置が違うので、push_backした時の挙動が異なるresizeしてからのpush_backreserveしてからのpush_back解説:vectorはnewのラッパーであるから、newの使い方から考えると分かりやすい。resizeにせよreserveにせよ、その分のメモリを確保することに変わりはない。これがうれしいときはreserve:・push_backした時に「使用済みの要素の次の要素」に値が入る。リストの末尾に追加していくような感じになる。size()を見れば保存した項目の個数がわかる。・少なくともreserveで指定した回数分のpush_backに関しては、再確保が発生しないことが保障される。これがうれしいときはresize:・size()が確保した要素数になるので、普通の配列と同じように使える。動作の違いから、resizeした後にpush_backすることは少ない。逆に、reserveしてから、size()以上の要素に対してoperator[]でアクセスしてはいけない。これらのことをやっているコードは、バグである可能性がある(特に後者)余談だが、こんなことをしてもいいかもしれない。40000最初にある程度の大きさをreserveしてcapacityを広げておけば、後のresize時に再確保の可能性が減り、高速化が図れる(かも)。あと、最初に書いたが、resizeした時はその分のコンストラクタが走る。コメントをキャンセルメールアドレスが公開されることはありません。date*日本語が含まれない投稿は無視されますのでご注意ください。