Подтвердить что ты не робот

Почему контейнеры push_back в vector <> и list <> не возвращают ссылку на вставленный элемент?

Я понимаю, что могу получить ссылку iterator, вызвав back(), но почему бы не вернуть его с помощью push_back()? Это по соображениям производительности? Или это из-за безопасности исключений (похоже, почему pop_back() не возвращает всплывающее значение)? В любом случае, пожалуйста, объясните.

4b9b3361

Ответ 1

Различные функции insert возвращают итератор по очень простой причине: вызывающий не обязательно знает, как получить итератор для этого элемента. map::insert и set::insert возвращают одно, потому что в противном случае вызывающему нужно будет искать элемент.

Когда вы выполняете vector::push_back, вы знаете, где находится вставленный элемент. Это --vector.end(). Вам не нужно искать его; всегда это место. Вы можете получить его в постоянное время и довольно быстрое постоянное время.

Поэтому нет смысла возвращать то, что пользователь уже знает.

Ответ 2

Я не знаю, есть ли официальная причина, но самое непосредственное, что приходит мне в голову, - это производительность. Если вы посмотрите на большинство использований push_back и push_front, возвращаемое значение не будет использоваться. Если элемент нажат, это не так важно, как то, что он нажал.

Зачем возвращать несвободное значение, которое почти никогда не используется?

Ответ 3

Причина в том, что vector предоставляет метод insert, который возвращает итератор во вставленную позицию. Стандарт согласуется с тем, что push_back не возвращает значение, но некоторые формы insert будут, когда это возможно и целесообразно.