我一直认为,对于任何空的std::vector
V ,V.begin() == V.end()
。然而,我在C ++规范中没有看到任何声明总是为真的。它是否一定是真的,或者它恰好在大多数实现中都是正确的?
答案 0 :(得分:85)
是的,这就是标准要求empty()
任何容器的标准。
§23.2.1C ++ 11标准的表96说:
+----------+---------------+----------------------+
|Expression| Return Type | Operational Semantics|
|----------|---------------|----------------------|
|a.empty() |Convertible |a.begin() == a.end() |
| |to bool | |
| | | |
+-------------------------------------------------+
答案 1 :(得分:23)
23.2.1一般容器要求,特别是表96 容器要求已
a.empty()
可转换为bool
,操作语义a.begin() == a.end()
然后
6
begin()
返回一个迭代器,引用容器中的第一个元素。end()
返回一个迭代器 是容器的过去值。 如果容器为空,则begin() == end();
(强调我的)
答案 2 :(得分:1)
http://www.cplusplus.com/reference/vector/vector/end/
如果容器为空,则end()与begin()相同。
答案 3 :(得分:0)
是的,这是事实。这是proof。当然,std::distance(a.begin(), a.end()) == 0
表示空矢量。