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 itérateur à ces valeurs?
Réponses
Trop de publicités? façon mentionnée par @dirkgently ( v.begin() + index )
gentil et rapide pour les vecteurs
mais std::advance
( v.begin(), index )
plus générique et pour les itérateurs à accès aléatoire fonctionnent également à 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.
Ou vous pouvez utiliser std::advance
vector<int>::iterator i = L.begin();
advance(i, 2);
Actutally std::vector sont destinés à être utilisés comme C onglet en cas de besoin. (C++ standard demandes que pour les vecteurs de la mise en œuvre , autant que je sache - le remplacement de tableau dans Wikipédia) Par exemple, il est parfaitement légal de faire ce qui suit, selon moi:
int main()
{
void foo(const char *);
sdt::vector<char> 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, toto ne doit pas copier l'adresse passée en paramètre et le stocker dans un endroit, ou vous devez vous assurer dans votre programme pour ne jamais pousser un nouvel élément en vec, ou en demandant de modifier sa capacité. Ou de risque d'erreur de segmentation...
Donc dans votre exemple, elle conduit à
vector.insert(pos, &vec[first_index], &vec[last_index]);