为什么矢量<>中的push_back不成功?并列出<>容器返回对插入元素的引用?

时间:2012-01-23 16:51:24

标签: c++ stl containers

我意识到我可以通过调用back()来获取 iterator 引用,但为什么不用push_back()返回它?是出于性能原因吗?或者是由于异常安全(类似于pop_back()不返回弹出值的原因)?在任何一种情况下,请解释。

3 个答案:

答案 0 :(得分:16)

各种insert函数返回迭代器的原因很简单:调用者不一定知道如何获取该元素的迭代器。 map::insertset::insert会返回一个,否则调用者必须搜索该元素。

执行vector::push_back时,知道插入元素的位置。它是--vector.end()。你不必搜索它;它总是 那个位置。你可以在恒定的时间内获得它,并且非常快速的恒定时间。

因此,返回用户已经知道的东西真的没有意义。

答案 1 :(得分:2)

我不知道是否有正式理由,但我认为最直接的是表现。如果您查看push_backpush_front的大部分用法,则不会使用返回值。推动元素的位置并不像推动元素那么重要。

为什么要返回几乎从不使用的非自由值?

答案 2 :(得分:0)

原因是vector提供了一个insert方法,它确实将迭代器返回到插入位置。标准是一致的,因为push_back不会返回值,但某些形式的insert会在可用且适当的情况下返回。