std::vector
のoperator[]
に新しい要素を挿入する代わりに参照を返す理由はありますか? vector::operator
ためcppreference.comページはstd::map::operator[]
とは異なりherevector :: operator []がmap :: operator []と同様の方法で実装されていないのはなぜですか?
を言い、このオペレータは、容器の中に新しい要素を挿入することはありません。
map::operator[]
says
用ページ「は、そのようなキーが存在しない場合は、挿入を行う、キーにキー同等にマッピングされた値への参照を返します。」間
はなぜvector::operator[]
はmap::operator[]
がinsert(std::make_pair(key, T())).first->second;
を呼び出す方法のようにvector::push_back
かvector::insert
を呼び出すことで実現することができませんでしたか?
実際に 'std :: map :: operator []'が実際に実装される方法は、既に十分な混乱を招いています。 UBは境界外にアクセスされる 'std :: vector'にとっては問題ありません。 –
'some_vector [1000]'と 'some_vector'のサイズが10の間に何が起こるか想像してみましょう。まあ、私はちょうど真ん中に990のエントリがあると想像するのか分かりません。 –
@NickyC:しかし、地図にも同じ問題があります! –