66 votes

Est begin() == end() pour tout empty() le vecteur?

J'ai longtemps supposé que, pour tout vider std::vector V, V.begin() == V.end(). Pourtant, je ne vois rien dans le C++ cahier des charges qui stipule ceci afin de toujours être vrai. Est-il nécessairement vrai ou c'est juste qu'il arrive d'être vrai sur la plupart des implémentations?

85voto

Rapptz Points 10135

Oui, c'est ce que la norme exige qu'il soit pour empty() pour n'importe quel conteneur.

§ 23.2.1 Tableau 96 du C++11, dit:

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

23voto

juanchopanza Points 115680

23.2.1 Général contenant les exigences, spécifiquement Tableau 96 Conteneur a

a.empty() convertibles bool, une sémantique opérationnelle a.begin() == a.end()

Alors

6 begin() retourne un itérateur se référant au premier élément du conteneur. end() retourne un itérateur qui le passé est-il-la-fin de la valeur pour le conteneur. Si le conteneur est vide, alors begin() == end();

(l'emphase est mienne)

1voto

Jim Points 2789

http://www.cplusplus.com/reference/vector/vector/end/

Si le conteneur est vide, end() est la même que begin().

0voto

Ivan Smirnov Points 851

Oui, c'est vrai. Voici la preuve. Et, bien sûr, std::distance(a.begin(), a.end()) == 0 pour un vecteur vide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X