Trova l'indice degli elementi in Vector in C++

Jinku Hu 12 ottobre 2023
  1. Usa la funzione personalizzata per trovare l’indice degli elementi nel vettore in C++
  2. Usa l’algoritmo std::find per trovare l’indice degli elementi in Vector in C++
  3. Usa l’algoritmo std::find_if per trovare l’indice degli elementi in Vector in C++
Trova l'indice degli elementi in Vector in C++

Questo articolo spiegherà diversi metodi su come trovare l’indice degli elementi nel vettore in C++.

Usa la funzione personalizzata per trovare l’indice degli elementi nel vettore in C++

Possiamo usare una funzione di ricerca lineare personalizzata per trovare la posizione di un dato elemento nel vettore. Nota che questo è un metodo piuttosto inefficiente per risolvere questo problema. Nel seguente codice di esempio, dichiariamo un vettore di numeri interi e cerchiamo una posizione arbitraria dell’elemento, che emettiamo se la chiamata ha successo.

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

Produzione:

Could not found the element 32 in vector

Usa l’algoritmo std::find per trovare l’indice degli elementi in Vector in C++

In alternativa, possiamo usare l’algoritmo std::find che fa parte della libreria STL. Questa funzione restituisce l’iteratore al primo elemento che soddisfa la condizione. D’altra parte, se non viene trovato alcun elemento, l’algoritmo restituisce l’ultimo elemento dell’intervallo. Attenzione però, l’iteratore restituito dovrebbe essere decrementato dall’iteratore begin per calcolare la posizione.

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

Produzione:

Found the element 10 at position 9

Usa l’algoritmo std::find_if per trovare l’indice degli elementi in Vector in C++

Un altro metodo per trovare l’indice dell’elemento è invocare l’algoritmo std::find_if. È simile a std::find tranne per il fatto che il terzo argomento può essere un’espressione di predicato per valutare ogni elemento iterato. Se l’espressione restituisce true, l’algoritmo tornerà. Si noti che passiamo l’espressione lambda come terzo argomento, che controlla se l’elemento è uguale a 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);
}

Produzione:

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

Articolo correlato - C++ Vector