Действительно ли это допустимо для сравнения итераторов, которые получены от контейнера отдельно?

Например, это это выражение, допустимое в семантическом?

container.begin() == container.begin();
6
задан Thomson 21 July 2010 в 02:56
поделиться

2 ответа

Да, если ни один итератор не был признан недействительным.

Например, следующее будет недопустимым:

std::deque<int> d;

std::deque<int> begin1 = d.begin();
d.push_front(42);                   // invalidates begin1!
std::deque<int> begin2 = d.begin();
assert(begin1 == begin2);           // wrong; you can't use begin1 anymore.
11
ответ дан 8 December 2019 в 15:58
поделиться

Да, begin () вернет тот же итератор для экземпляра контейнера, если вы не измените контейнер каким-либо образом ( end () также имеет это свойство). Например, std :: vector :: push_back () может вызвать перераспределение массива для размещения новых элементов.

4
ответ дан 8 December 2019 в 15:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: