为什么 vector<> 和 list<> 容器中的push_back不返回对插入元素的引用?
Why don't the push_back in vector<> and list<> containers return the reference to the inserted element?
我意识到我可以通过调用back()
来获得迭代器引用,但为什么不将其与push_back()
一起返回呢?是出于性能原因吗?还是由于异常安全(类似于pop_back()
不返回弹出值的原因)?无论哪种情况,请解释。
各种insert
函数返回迭代器的原因很简单:调用者不一定知道如何为该元素获取迭代器。map::insert
和set::insert
返回一,因为否则,调用者将不得不搜索元素。
当您执行vector::push_back
时,您知道插入的元素在的哪里。它是--vector.end()
。你不必搜索它;总是那个位置。你可以在恒定时间内得到它,并且在恒定时间下非常快。
因此,返回用户已经知道的内容是没有意义的。
我不知道是否有官方原因,但我脑海中最直接的是性能。如果查看push_back
和push_front
的大多数用法,则不会使用返回值。元素被推到哪里并不重要,重要的是它被推到了哪里。
为什么要返回一个几乎从未使用过的非免费值?
原因是vector
提供了一个insert
方法,它确实将迭代器返回到插入的位置。该标准是一致的,因为push_back
不返回值,但某些形式的insert
会在可用且适当的情况下返回值。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中