Я давно предполагал, что для любого пустого std::vector V, V.begin() == V.end(). Тем не менее я не вижу ничего в спецификации на С++, которая утверждает, что это всегда верно. Это обязательно верно или действительно ли это справедливо для большинства реализаций?
Is begin() == end() для любого пустого() вектора?
Ответ 1
Да, это то, что стандарт требует от него для empty() для любого контейнера.
§ 23.2.1 В таблице 96 стандарта С++ 11 говорится:
 +----------+---------------+----------------------+
 |Expression|  Return Type  | Operational Semantics|
 |----------|---------------|----------------------|
 |a.empty() |Convertible    |a.begin() == a.end()  |
 |          |to bool        |                      |
 |          |               |                      |
 +-------------------------------------------------+
		Ответ 2
23.2.1 Общие требования к контейнеру, в частности таблица 96 Требования к контейнеру имеют
a.empty()конвертируется вbool, операционная семантикаa.begin() == a.end()
Тогда
6
begin()возвращает итератор, ссылающийся на первый элемент в контейнере.end()возвращает итератор, который это значение конца для контейнера. Если контейнер пуст, тоbegin() == end();
(акцент мой)
Ответ 3
http://www.cplusplus.com/reference/vector/vector/end/
Если контейнер пуст, end() совпадает с begin().
Ответ 4
Да, это правда. Вот доказательство. И, конечно, std::distance(a.begin(), a.end()) == 0 для пустого вектора.