Encontre índice de elemento em vetor em C++

Jinku Hu 12 outubro 2023
  1. Use a função personalizada para encontrar índice de elemento em vetor em C++
  2. Use o algoritmo std::find para encontrar o índice do elemento no vetor em C++
  3. Use o algoritmo std::find_if para encontrar o índice do elemento no vetor em C++
Encontre índice de elemento em vetor em C++

Este artigo irá explicar vários métodos de como encontrar o índice do elemento no vetor em C++.

Use a função personalizada para encontrar índice de elemento em vetor em C++

Podemos usar uma função de pesquisa linear personalizada para encontrar a posição do elemento dado no vetor. Observe que este é um método bastante ineficiente para resolver esse problema. No código de exemplo a seguir, declaramos um vetor de inteiros e procuramos por uma posição de elemento arbitrário, que produzimos se a chamada for bem-sucedida.

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

Resultado:

Could not found the element 32 in vector

Use o algoritmo std::find para encontrar o índice do elemento no vetor em C++

Alternativamente, podemos usar o algoritmo std::find que faz parte da biblioteca STL. Esta função retorna o iterador para o primeiro elemento que satisfaça a condição. Por outro lado, se nenhum elemento for encontrado, o algoritmo retorna o último elemento do intervalo. Lembre-se, porém, de que o iterador retornado deve ser decrementado pelo iterador begin para calcular a posição.

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

Resultado:

Found the element 10 at position 9

Use o algoritmo std::find_if para encontrar o índice do elemento no vetor em C++

Outro método para encontrar o índice do elemento é invocar o algoritmo std::find_if. É semelhante a std::find, exceto que o terceiro argumento pode ser uma expressão de predicado para avaliar cada elemento iterado. Se a expressão retornar verdadeiro, o algoritmo retornará. Observe que passamos a expressão lambda como o terceiro argumento, que verifica se o elemento é igual 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);
}

Resultado:

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

Artigo relacionado - C++ Vector