Rechercher l'index d'élément dans le vecteur en C++

Jinku Hu 12 octobre 2023
  1. Utiliser la fonction personnalisée pour rechercher l’index d’élément dans le vecteur en C++
  2. Utilisez l’algorithme std::find pour rechercher l’index d’élément dans le vecteur en C++
  3. Utilisez l’algorithme std::find_if pour rechercher l’index d’élément dans le vecteur en C++
Rechercher l'index d'élément dans le vecteur en C++

Cet article explique plusieurs méthodes de recherche d’index d’élément en vecteur en C++.

Utiliser la fonction personnalisée pour rechercher l’index d’élément dans le vecteur en C++

Nous pouvons utiliser une fonction de recherche linéaire personnalisée pour trouver la position de l’élément donné dans le vector. Notez que c’est une méthode assez inefficace pour résoudre ce problème. Dans l’exemple de code suivant, nous déclarons un vector d’entiers et recherchons une position d’élément arbitraire, que nous générons si l’appel réussit.

#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);
}

Production:

Could not found the element 32 in vector

Utilisez l’algorithme std::find pour rechercher l’index d’élément dans le vecteur en C++

Alternativement, nous pouvons utiliser l’algorithme std::find qui fait partie de la bibliothèque STL. Cette fonction renvoie l’itérateur vers le premier élément qui satisfait la condition. En revanche, si aucun élément n’est trouvé, l’algorithme renvoie le dernier élément de la plage. Attention cependant, l’itérateur retourné doit être décrémenté par l’itérateur begin pour calculer la position.

#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);
}

Production:

Found the element 10 at position 9

Utilisez l’algorithme std::find_if pour rechercher l’index d’élément dans le vecteur en C++

Une autre méthode pour trouver l’index de l’élément est d’appeler l’algorithme std::find_if. C’est similaire à std::find sauf que le troisième argument peut être une expression de prédicat pour évaluer chaque élément itéré. Si l’expression renvoie true, alors l’algorithme retournera. Notez que nous passons l’expression lambda comme troisième argument, qui vérifie si l’élément est égal à 10.

#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);
}

Production:

Found the element 10 at position 9
Auteur: 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

Article connexe - C++ Vector