Elementindex in Vektor in C++ finden

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die benutzerdefinierte Funktion, um den Elementindex in Vector in C++ zu finden
  2. Verwendung des std::find-Algorithmus zum Finden des Elementindex in einem Vektor in C++
  3. Verwendung des std::find_if-Algorithmus zum Finden des Elementindexes in einem Vektor in C++
Elementindex in Vektor in C++ finden

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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Verwandter Artikel - C++ Vector