我意识到我可以通过调用back()
来获取 iterator 引用,但为什么不用push_back()
返回它?是出于性能原因吗?或者是由于异常安全(类似于pop_back()
不返回弹出值的原因)?在任何一种情况下,请解释。
答案 0 :(得分:16)
各种insert
函数返回迭代器的原因很简单:调用者不一定知道如何获取该元素的迭代器。 map::insert
和set::insert
会返回一个,否则调用者必须搜索该元素。
执行vector::push_back
时,知道插入元素的位置。它是--vector.end()
。你不必搜索它;它总是 那个位置。你可以在恒定的时间内获得它,并且非常快速的恒定时间。
因此,返回用户已经知道的东西真的没有意义。
答案 1 :(得分:2)
我不知道是否有正式理由,但我认为最直接的是表现。如果您查看push_back
和push_front
的大部分用法,则不会使用返回值。推动元素的位置并不像推动元素那么重要。
为什么要返回几乎从不使用的非自由值?
答案 2 :(得分:0)
原因是vector
提供了一个insert
方法,它确实将迭代器返回到插入位置。标准是一致的,因为push_back
不会返回值,但某些形式的insert
会在可用且适当的情况下返回。