Например, это это выражение, допустимое в семантическом?
container.begin() == container.begin();
Да, если ни один итератор не был признан недействительным.
Например, следующее будет недопустимым:
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.
Да, begin ()
вернет тот же итератор для экземпляра контейнера, если вы не измените контейнер каким-либо образом ( end ()
также имеет это свойство). Например, std :: vector :: push_back ()
может вызвать перераспределение массива для размещения новых элементов.