web-dev-qa-db-fra.com

Comment puis-je vérifier si int donné existe dans le tableau?

Par exemple, j'ai ce tableau:

int myArray[] = { 3, 6, 8, 33 };

Comment vérifier si la variable x donnée s'y trouve?

Dois-je écrire ma propre fonction et boucler le tableau, ou existe-t-il en c ++ moderne équivalent à in_array en PHP?

17
rsk82

Vous pouvez utiliser std::find pour cela:

#include <algorithm> // for std::find
#include <iterator> // for std::begin, std::end

int main () 
{
  int a[] = {3, 6, 8, 33};
  int x = 8;
  bool exists = std::find(std::begin(a), std::end(a), x) != std::end(a);
}

std::find renvoie un itérateur à la première occurrence de x, ou un itérateur à un après la fin de la plage si x n'est pas trouvé.

38
juanchopanza

Je pense que vous cherchez std::any_of , qui retournera une réponse vraie/fausse pour détecter si un élément est dans un conteneur (tableau, vecteur, deque, etc.)

int val = SOME_VALUE; // this is the value you are searching for
bool exists = std::any_of(std::begin(myArray), std::end(myArray), [&](int i)
{
    return i == val;
});

Si vous voulez savoir où se trouve l'élément, std::find retournera un itérateur au premier élément correspondant aux critères que vous fournissez (ou un prédicat que vous lui donnez).

int val = SOME_VALUE;
int* pVal = std::find(std::begin(myArray), std::end(myArray), val);
if (pVal == std::end(myArray))
{
    // not found
}
else
{
    // found
}
14
Zac Howland

Vous n'avez presque jamais à écrire vos propres boucles en C++. Ici, vous pouvez utiliser std :: find .

const int toFind = 42;
int* found = std::find (myArray, std::end (myArray), toFind);
if (found != std::end (myArray))
{
  std::cout << "Found.\n"
}
else
{
  std::cout << "Not found.\n";
}

std::end nécessite C++ 11. Sans lui, vous pouvez trouver le nombre d'éléments dans le tableau avec:

const size_t numElements = sizeof (myArray) / sizeof (myArray[0]);

... et la fin avec:

int* end = myArray + numElements;
2
John Dibling

Essaye ça

#include <iostream>
#include <algorithm>


int main () {
  int myArray[] = { 3 ,6 ,8, 33 };
  int x = 8;

  if (std::any_of(std::begin(myArray), std::end(myArray), [=](int n){return n == x;}))   {
      std::cout << "found match/" << std::endl;
  }

  return 0;

}

2
Duncan Smith
int index = std::distance(std::begin(myArray), std::find(begin(myArray), end(std::myArray), VALUE));

Renvoie un index non valide (longueur du tableau) s'il n'est pas trouvé.

1
Neil Kirk