Ich versuche, den Index eines Elements in einem Vektor von zu erhalten strings
, um ihn als Index in einem anderen Vektor vom int
Typ zu verwenden. Ist dies möglich?
Beispiel:
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);
}
Jetzt möchte ich die Position von old_name
im Names
Vektor erhalten, um damit auf bestimmte Elemente im Numbers
Vektor zuzugreifen . Damit ich sagen kann:
Numbers[position] = 3 ; // or whatever value assigned here.
Ich habe versucht:
vector <string> :: const_iterator pos;
pos = (find(Names.begin(), Names.end(), old_name_))
Numbers[pos] = 3;
aber offensichtlich funktioniert das nicht, da pos
es vom Typ string ist!
Antworten:
Um eine Position eines Elements in einem Vektor zu erhalten, der einen Iterator kennt, der auf das Element zeigt, subtrahieren Sie einfach
v.begin()
vom Iterator:Jetzt müssen Sie prüfen ,
pos
gegenNames.size()
sehen , ob es außerhalb der Grenzen ist oder nicht:Vektoriteratoren verhalten sich ähnlich wie Array-Zeiger. Das meiste, was Sie über Zeigerarithmetik wissen, kann auch auf Vektoriteratoren angewendet werden.
Ab C ++ 11 können Sie
std::distance
anstelle der Subtraktion sowohl Iteratoren als auch Zeiger verwenden:quelle
ptrdiff_t
es besser ist alssize_t
seitdemptrdiff_t
, eine Warnung vor einem Vergleich zwischen vorzeichenbehafteter und vorzeichenloser Ganzzahlptrdiff_t
da Sie damit den Abstand zwischen zwei Iteratorpaaren im selben Container speichern können, selbst in Situationen, in denen das Ergebnis negativ ist. Wenn wir verwendensize_t
, müssen wir darauf achten, einen größeren Iterator nicht von einem kleineren Iterator zu subtrahieren.Wenn Sie einen Index möchten, können Sie ihn
std::find
in Kombination mit verwendenstd::distance
.quelle
Ich bin ein Anfänger, daher hier eine Antwort für Anfänger. Das if in der for-Schleife gibt i an, das dann jedoch nach Bedarf verwendet werden kann, z. B. Numbers [i] in einem anderen Vektor. Das meiste ist zum Beispiel Flusen, das für / wenn wirklich alles sagt.
quelle