对于任何empty()向量,begin()== end()吗?

时间:2013-07-22 19:50:59

标签: c++ stdvector

我一直认为,对于任何空的std::vector V V.begin() == V.end()。然而,我在C ++规范中没有看到任何声明总是为真的。它是否一定是真的,或者它恰好在大多数实现中都是正确的?

4 个答案:

答案 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表示空矢量。