Définir un extrait de vecteur avec des itérateurs.
Bonjour.
Je souhaiterais avoir un précision sur l'utilisation des itérateurs.
Je code des fonctions qui traitent des données (des points x, y, z) contenues dans un std::vector. Par exemple :
Code:
1 2 3 4
| void foo(const std::vector<point>& begin, const std::vector<point>& end)
{
...
} |
Puis j'ai une procédure qui appelle ces fonctions :
- tant qu'on n'est pas interrompu
- acquisition des points
- insertion des points dans le vecteur (push_back)
- appel de la fonction de traitement sur les derniers points insérés
- fin du tant que et rebouclage
Je me suis demandé si je pouvais utiliser l'itérateur .end() obtenu avant les push_back en tant qu'itérateur begin et l'itérateur .end() obtenu après les push_back en tant qu'itérateur end pour appeler ma fonction de traitement.
J'ai donc réalisé ce petit bout de test qui semble fonctionner.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include <cassert>
#include <iostream>
#include <vector>
int main(int argc, char **argv)
{
std::vector<int> foo;
foo.push_back(1);
foo.push_back(2);
foo.push_back(3);
std::vector<int>::iterator i1 = foo.end();
foo.push_back(4);
std::vector<int>::iterator i2 = foo.end() - 1;
std::vector<int>::iterator i3 = foo.end();
assert(i1 == i2);
assert((i1 + 1) == i3);
std::cout << *i1 << std::endl;
return 0;
} |
Ma question est : est-ce l'implémentation qui fait que ça marche, ou est-ce un comportement décrit dans le standard ?
Je trouve en particulier douteux qu'un itérateur qu'on a obtenu avec end() à un moment ne soit pas le même après insertion de nouveaux éléments...
Merci pour votre aide.