Frage zu find()
-
Hi,
ich hab mal eine Frage zur find() Funktion. Wenn ich mit dieser Funktion etwas gefunden hab, kann ich dann auch rausbekommen, an welcher Position im Container sich das Object befindet?Hier mal ein Beispiel:
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { //ein vector mit 10 elementen vector<int> iVec(10); //den vector füllen for(size_t i = 0; i < iVec.size(); i++) { iVec[i] = i; } int iEingabe = 0; cout << "Vector gefuellt, welche zahl (0-9) soll gesucht werden? "; cin >> iEingabe; //find algorithmus vector<int>::iterator vIter = find(iVec.begin(), iVec.end(), iEingabe); if(vIter != iVec.end()) //bei erfolgloser zeigt vIter auf end() cout << "zahl " << *vIter << " gefunden" << endl; else cout << "Diese zahl ist nicht vorhanden" << endl; return 0; }Angenommen ich suche nach der Zahl 5, krieg ich über den Iterator auch raus, in welchem Index sich die zahl 5 im Vector befindet?
-
Dafür gibt es die Funktion std::distance, die die Distanz zwischen zwei Iteratoren ermittelt.
int index = std::distance(iVec.begin(), vIter);Für Random-Access-Iteratoren wie den von std::vector ist das intern eine einfache Subtraktion und damit O(1). (vIter - iVec.begin()) würde hier auch funktionieren. Da das aber nicht für alle Container gilt, ist std::distance universeller.
-
Vielen dank für die antwort
