Pseudo Code:
int arr[ 5 ] = { 4, 1, 3, 2, 6 }, x;
x = find(3).arr ;
x reviendrait alors 2.
La syntaxe que vous avez là pour votre fonction n'a pas de sens (pourquoi la valeur de retour aurait-elle un membre appelé arr
?).
Pour trouver l'index, utilisez std::distance
et std::find
à partir de l'en-tête <algorithm>
.
int x = std::distance(arr, std::find(arr, arr + 5, 3));
Ou vous pouvez en faire une fonction plus générique:
template <typename Iter>
size_t index_of(Iter first, Iter last, typename const std::iterator_traits<Iter>::value_type& x)
{
size_t i = 0;
while (first != last && *first != x)
++first, ++i;
return i;
}
Ici, je retourne la longueur de la séquence si la valeur n'est pas trouvée (ce qui est cohérent avec la façon dont les algorithmes STL renvoient le dernier itérateur). Selon vos goûts, vous voudrez peut-être utiliser une autre forme de compte rendu d'échec.
Dans votre cas, vous l'utiliseriez comme suit:
size_t x = index_of(arr, arr + 5, 3);
Voici un moyen très simple de le faire à la main. Vous pouvez également utiliser le <algorithm>
, comme le suggère Peter.
#include <iostream>
int find(int arr[], int len, int seek)
{
for (int i = 0; i < len; ++i)
{
if (arr[i] == seek) return i;
}
return -1;
}
int main()
{
int arr[ 5 ] = { 4, 1, 3, 2, 6 };
int x = find(arr,5,3);
std::cout << x << std::endl;
}
la réponse de fantaisie. Utilisez std :: vector et recherchez avec std :: find
la réponse simple
utiliser une boucle for
#include <vector>
#include <algorithm>
int main()
{
int arr[5] = {4, 1, 3, 2, 6};
int x = -1;
std::vector<int> testVector(arr, arr + sizeof(arr) / sizeof(int) );
std::vector<int>::iterator it = std::find(testVector.begin(), testVector.end(), 3);
if (it != testVector.end())
{
x = it - testVector.begin();
}
return 0;
}
Ou vous pouvez simplement construire un vecteur de manière normale, sans le créer à partir d'un tableau d'ints, puis utiliser la même solution, comme indiqué dans mon exemple.
int arr[5] = {4, 1, 3, 2, 6};
vector<int> vec;
int i =0;
int no_to_be_found;
cin >> no_to_be_found;
while(i != 4)
{
vec.Push_back(arr[i]);
i++;
}
cout << find(vec.begin(),vec.end(),no_to_be_found) - vec.begin();
Nous utilisons ici simplement la recherche linéaire. Au début initialiser l'index égal à -1. Ensuite, recherchez dans le tableau, le cas échéant, affectez la valeur d'index dans variable d'index et break. Sinon, index = -1.
int find(int arr[], int n, int key)
{
int index = -1;
for(int i=0; i<n; i++)
{
if(arr[i]==key)
{
index=i;
break;
}
}
return index;
}
int main()
{
int arr[ 5 ] = { 4, 1, 3, 2, 6 };
int n = sizeof(arr)/sizeof(arr[0]);
int x = find(arr ,n, 3);
cout<<x<<endl;
return 0;
}
Si le tableau n'est pas trié, vous devrez utiliser recherche linéaire .