C ++ STL Vectors: Récupère l’iterator à partir de l’index?

Donc, j’ai écrit un tas de code qui accède aux éléments dans un vecteur stl par index [], mais maintenant je dois copier juste un morceau du vecteur. On dirait que vector.insert(pos, first, last) est la fonction que je veux … sauf que je n’ai que le premier et le dernier en ints. Y a-t-il une belle manière de pouvoir obtenir un iterator à ces valeurs?

Essaye ça:

 vector::iterator nth = v.begin() + index; 

façon mentionnée par @dirkgently ( v.begin() + index ) agréable et rapide pour les vecteurs

mais std::advance ( v.begin(), index ) plus générique et pour les iterators à access aléatoire fonctionne aussi à temps constant.

MODIFIER
différences d’utilisation:

 std::vector<>::iterator it = ( v.begin() + index ); 

ou

 std::vector<>::iterator it = v.begin(); std::advance( it, index ); 

ajouté après les notes @litb.

Aussi; auto it = std::next(v.begin(), index);

Mise à jour: nécessite un compilateur compatible C ++ 11x

Ou vous pouvez utiliser std::advance

 vector::iterator i = L.begin(); advance(i, 2); 

En fait, std :: vector est destiné à être utilisé comme onglet C lorsque cela est nécessaire. (Le standard C ++ demande cela pour l’implémentation vectorielle, pour autant que je sache – remplacement pour array dans Wikipedia ) Par exemple, il est parfaitement légal de le faire, selon moi:

 int main() { void foo(const char *); sdt::vector vec; vec.push_back('h'); vec.push_back('e'); vec.push_back('l'); vec.push_back('l'); vec.push_back('o'); vec.push_back('/0'); foo(&vec[0]); } 

Bien sûr, soit foo ne doit pas copier l’adresse passée en paramètre et la stocker quelque part, ou vous devez vous assurer que votre programme ne pousse jamais un nouvel élément dans vec ou ne demande pas à modifier sa capacité. Ou risque de segmentation faute …

Par conséquent, dans votre exemple, cela conduit à

 vector.insert(pos, &vec[first_index], &vec[last_index]);