Je voudrais obtenir loin la valeur suivante pour l'itérateur STL list
mais il n'implémente pas operator+
, vector
l'a cependant. Pourquoi et comment puis-je obtenir la valeur où je veux?Pourquoi seul l'algorithme random-access-iterator implémente l'opérateur + en C++?
Je pense que je peux le faire si j'appelle operator++
plusieurs fois, mais n'est-ce pas un peu sale?
Ce que je veux faire est la suivante:
list<int> l;
...omitted...
list<int>::iterator itr = l.begin() + 3; // but, list iterator does not have
// operator+
Quelle est la meilleure solution pour ce que je veux?
(Presque) sans rapport: vous devez vous assurer qu'il est possible d'atteindre cette position, sinon vous invoquerez un comportement indéfini. Bien que de 'list :: begin()' c'est facile, dans un cas plus générique, la seule façon de savoir (pour non RandomAccessIterator) la distance avec 'list :: end()' est d'invoquer 'std :: distance' ... O (N) aussi. –
Deux excellentes réponses sur ce sujet. +1 à la communauté! –