Re: Итератор на только что добавленный элемент списка
От: Андрей Тарасевич Беларусь  
Дата: 22.01.22 08:23
Оценка:
Здравствуйте, 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, а обрабатывать ситуацию изначально пустого списка, как особую.

4. ...
Best regards,
Андрей Тарасевич
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.