是否有empty()向量的begin()== end()?


71

我一直认为,对于任何空std::vector VV.begin() == V.end()。但是,我在C ++规范中看不到任何东西表明这始终是正确的。在大多数实现中,它是否必定是正确的?


5
我很确定这已经被问到了,尽管我很难找到它,而且我很确定他们是平等的。
克里斯,

3
如果不是真的,这将使在矢量上进行迭代的所有通用模式无效;;)
Karoly Horvath 2013年

相关问题:如果将begin()end()都首先转换为指针,则等式是否仍然成立?我担心连演员表都不确定吗?
亚伦·麦克戴德

Answers:


92

是的,这就是该标准要求适用empty()于任何容器的内容。

第23.2.1节,C ++ 11标准的表96指出:

 +----------+---------------+----------------------+
 |Expression|  Return Type  | Operational Semantics|
 |----------|---------------|----------------------|
 |a.empty() |Convertible    |a.begin() == a.end()  |
 |          |to bool        |                      |
 |          |               |                      |
 +-------------------------------------------------+

25

23.2.1一般容器要求,特别是表96集装箱要求具有

a.empty()转换为bool,操作语义a.begin() == a.end()

然后

6begin()返回引用容器中第一个元素的迭代器。end()返回一个迭代器,该迭代器是容器的过去值。如果容器是空的,那么begin() == end();

(强调我的)



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.