【发布时间】:2016-08-30 16:24:07
【问题描述】:
std::vector 的operator[] 是否有任何理由只返回引用而不是插入新元素? vector::operator 的 cppreference.com 页面显示 here
与
std::map::operator[]不同,此运算符从不向容器中插入新元素。
当页面为map::operator[]says
“返回对映射到与 key 等效的键的值的引用,如果这样的键不存在,则执行插入。”
为什么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:但是地图也有同样的问题!
-
@KerrekSB,怎么会这样?地图中没有要初始化的中间条目。
-
我认为问题的区别在于,为什么
std::map::operator[]()插入一个元素,即使只是访问一个不存在的键?
标签: c++ dictionary vector stl