为什么 vector<> 和 list<> 容器中的push_back不返回对插入元素的引用?

Why don't the push_back in vector<> and list<> containers return the reference to the inserted element?

本文关键字:gt lt 返回 引用 back 元素 插入 list vector push 为什么      更新时间:2023-10-16

我意识到我可以通过调用back()来获得迭代器引用,但为什么不将其与push_back()一起返回呢?是出于性能原因吗?还是由于异常安全(类似于pop_back()不返回弹出值的原因)?无论哪种情况,请解释。

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

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

因此,返回用户已经知道的内容是没有意义的。

我不知道是否有官方原因,但我脑海中最直接的是性能。如果查看push_backpush_front的大多数用法,则不会使用返回值。元素被推到哪里并不重要,重要的是它被推到了哪里。

为什么要返回一个几乎从未使用过的非免费值?

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