Elementindex in Vektor in C++ finden
- Verwenden Sie die benutzerdefinierte Funktion, um den Elementindex in Vector in C++ zu finden
-
Verwendung des
std::find
-Algorithmus zum Finden des Elementindex in einem Vektor in C++ -
Verwendung des
std::find_if
-Algorithmus zum Finden des Elementindexes in einem Vektor in C++
In diesem Artikel werden verschiedene Methoden zum Suchen des Elementindex in Vektoren in C++ erläutert.
Verwenden Sie die benutzerdefinierte Funktion, um den Elementindex in Vector in C++ zu finden
Wir können eine benutzerdefinierte lineare Suchfunktion verwenden, um die Position des angegebenen Elements im Vektor
zu finden. Beachten Sie, dass dies eine ziemlich ineffiziente Methode ist, um dieses Problem zu lösen. Im folgenden Beispielcode deklarieren wir einen Vektor
von ganzen Zahlen und suchen nach einer beliebigen Elementposition, die wir ausgeben, wenn der Aufruf erfolgreich ist.
#include <iostream>
#include <string>
#include <vector>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::vector;
int findIndex(const vector<int> &arr, int item) {
for (auto i = 0; i < arr.size(); ++i) {
if (arr[i] == item) return i;
}
return -1;
}
int main(int argc, char *argv[]) {
vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
auto pos = findIndex(arr, 32);
pos != -1
? cout << "Found the element " << 32 << " at position " << pos << endl
: cout << "Could not found the element " << 32 << " in vector" << endl;
exit(EXIT_SUCCESS);
}
Ausgabe:
Could not found the element 32 in vector
Verwendung des std::find
-Algorithmus zum Finden des Elementindex in einem Vektor in C++
Alternativ können wir den Algorithmus std::find
verwenden, der Teil der STL-Bibliothek ist. Diese Funktion gibt den Iterator an das erste Element zurück, das die Bedingung erfüllt. Wenn andererseits kein Element gefunden wird, gibt der Algorithmus das letzte Element des Bereichs zurück. Beachten Sie jedoch, dass der zurückgegebene Iterator durch den Iterator begin
dekrementiert werden sollte, um die Position zu berechnen.
#include <iostream>
#include <string>
#include <vector>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::vector;
int findIndex2(const vector<int> &arr, int item) {
auto ret = std::find(arr.begin(), arr.end(), item);
if (ret != arr.end()) return ret - arr.begin();
return -1;
}
int main(int argc, char *argv[]) {
vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
auto pos2 = findIndex2(arr, 10);
pos2 != -1
? cout << "Found the element " << 10 << " at position " << pos2 << endl
: cout << "Could not found the element " << 10 << " in vector" << endl;
exit(EXIT_SUCCESS);
}
Ausgabe:
Found the element 10 at position 9
Verwendung des std::find_if
-Algorithmus zum Finden des Elementindexes in einem Vektor in C++
Eine andere Methode, um den Index des Elements zu finden, besteht darin, den Algorithmus std::find_if
aufzurufen. Es ähnelt dem std::find
, außer dass das dritte Argument ein Prädikatausdruck sein kann, um jedes iterierte Element auszuwerten. Wenn der Ausdruck true zurückgibt, gibt der Algorithmus zurück. Beachten Sie, dass wir den Lambda-Ausdruck als drittes Argument übergeben, das prüft, ob das Element gleich 10
ist.
#include <iostream>
#include <string>
#include <vector>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::vector;
int main(int argc, char *argv[]) {
vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
auto ret =
std::find_if(arr.begin(), arr.end(), [](int x) { return x == 10; });
if (ret != arr.end())
cout << "Found the element " << 10 << " at position " << ret - arr.begin()
<< endl;
exit(EXIT_SUCCESS);
}
Ausgabe:
Found the element 10 at position 9
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook