Is begin() == end() для любого пустого() вектора?
Я давно предполагал, что для любого пустого std::vector
V, V.begin() == V.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
для пустого вектора.