Здравствуйте, 00011011, Вы писали:
0>Довольно простая задача — есть список, есть функция которая может добавить в конец этого списка произвольное число элементов (в т.ч. и ни одного). 0>Я хочу чтобы функция возвращала итератор на первый добавленный элемент, или end() если элементы не были добавлены — с тем, чтобы вызывающий код мог пройтись по этим новым элементам, не затрагивая старые. 0>Но оказалось, что push_back не возвращает ничего; 0>Если брать итератор end() вообще перед добавлением, то после добавления элемента он не указывает на первый добавленный элемент (что было бы логично для массивов, но разумеется не работает для списков, к сожалению). 0>Как красиво и эффективно решить эту задачу?
1. Использовать `std::list<>::insert` и запомнить результат первой вставки, если таковая была
2. Всегда держать в списке один guard element в самом начале. Тогда перед вставкой можно запомнить `std::prev()` от `end()`, а после вставки (любым способом) сделать `std::next` от запомненного значения.
3. То же самое, что и 2, но не держать в списке guard element, а обрабатывать ситуацию изначально пустого списка, как особую.