J'essaye d'obtenir l'index d'un élément dans un vecteur de strings
, de l'utiliser comme index dans un autre vecteur deint
type, est-ce possible?
Exemple:
vector <string> Names;
vector <int> Numbers;
...
// condition to check whether the name exists or not
if((find(Names.begin(), Names.end(), old_name_)) != Names.end())
{ // if yes
cout <<"Enter the new name."<< endl;
cin >> name;
replace(Names.begin(), Names.end(), old_name_, name);
}
Maintenant, je veux obtenir la position de old_name
dans le Names
vecteur, l'utiliser pour accéder à certains éléments du Numbers
vecteur. Pour que je puisse dire:
Numbers[position] = 3 ; // or whatever value assigned here.
J'ai essayé d'utiliser:
vector <string> :: const_iterator pos;
pos = (find(Names.begin(), Names.end(), old_name_))
Numbers[pos] = 3;
mais évidemment cela ne fonctionne pas car il pos
est de type string!
Réponses:
Pour obtenir une position d'un élément dans un vecteur connaissant un itérateur pointant vers l'élément, il suffit de soustraire
v.begin()
à l'itérateur:Maintenant , vous devez vérifier
pos
contreNames.size()
pour voir si elle est en dehors des limites ou non:Les itérateurs vectoriels se comportent de manière similaire aux pointeurs de tableau; la plupart de ce que vous savez sur l'arithmétique des pointeurs peut également être appliqué aux itérateurs vectoriels.
À partir de C ++ 11, vous pouvez utiliser
std::distance
à la place de la soustraction pour les itérateurs et les pointeurs:la source
ptrdiff_t
est mieux quesize_t
puisqueptrdiff_t
cela soulèverait un avertissement de comparaison entre un entier signé et non signéptrdiff_t
parce qu'il vous permet de stocker la distance entre n'importe quelle paire d'itérateurs dans le même conteneur, même dans des situations où le résultat est négatif. Si nous utilisons,size_t
nous devons faire attention à ne pas soustraire un itérateur plus grand d'un itérateur plus petit.Si vous voulez un index, vous pouvez l'utiliser
std::find
en combinaison avecstd::distance
.la source
Je suis un débutant, voici donc une réponse pour débutants. Le if dans la boucle for donne i qui peut ensuite être utilisé selon les besoins, comme Nombres [i] dans un autre vecteur. La plupart est fluff pour des exemples, le pour / si dit vraiment tout.
la source