Применяется ли аннулирование итератора к std::back_insert_iterators?
Код: Выделить всё
#include
#include
#include
int main() {
auto v = std::vector{ 0, 1, 2 };
auto iter = std::back_inserter(v);
*iter++ = 3;
v.clear(); // invalidates iterators, but
*iter++ = 4; // back_insert_iterator is special?
assert(v.size() == 1 && v[0] == 4);
return 0;
}
Но требует ли стандарт такой реализации? Может ли back_insert_iterator другого поставщика содержать и поддерживать итератор «один за концом», который можно использовать при вызове метода вставки контейнера? Кажется, это соответствует требованиям. Разница, конечно, в том, что он может быть признан недействительным.
Я знаю, что cppreference.com не является авторитетным, но он более доступен, чем стандартный. .
[Метод очистки вектора] делает недействительными любые ... итераторы, ссылающиеся на содержащиеся элементы. Все итераторы, проходящие за концом, также считаются недействительными. [cppreference.com, выделено]
std::back_insert_iterator может быть дочерним элементом итератора прошедшего конца.
Подробнее здесь: https://stackoverflow.com/questions/787 ... -container