Я давно предполагал, что для любого пустого 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
для пустого вектора.