Как найти определенное значение в массиве и вернуть его индекс?

Псевдокод:

int arr[ 5 ] = { 4, 1, 3, 2, 6 }, x;

x = find(3).arr ; 

x вернет 2.

Ответы

Ответ 1

Синтаксис, который у вас есть для вашей функции, не имеет смысла (почему возвращаемое значение имеет член с именем arr?).

Чтобы найти индекс, используйте std::distance и std::find из заголовка <algorithm>.

int x = std::distance(arr, std::find(arr, arr + 5, 3));

Или вы можете превратить его в более общую функцию:

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

Здесь я возвращаю длину последовательности, если значение не найдено (что согласуется с тем, как алгоритмы STL возвращают последний итератор). В зависимости от вашего вкуса вы можете использовать некоторые другие формы отчетов о сбоях.

В вашем случае вы будете использовать его так:

size_t x = index_of(arr, arr + 5, 3);

Ответ 2

Вот очень простой способ сделать это вручную. Вы также можете использовать <algorithm>, как предлагает Питер.

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

Ответ 3

Причудливый ответ. Используйте std::vector и выполните поиск с помощью std:: find

простой ответ

используйте цикл for

Ответ 4

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

Или вы можете просто построить вектор обычным способом, не создавая его из массива int, а затем использовать то же решение, что и в моем примере.

Ответ 5

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();

Ответ 6

Если массив несортирован, вам нужно будет использовать линейный поиск.

Ответ 7

Здесь мы используем просто линейный поиск. Сначала инициализируйте индекс, равный -1. Затем выполните поиск в массиве, если найдено назначение значения индекса в индексной переменной и разрыв. В противном случае 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;
 }