C++ 如何在数组中查找特定值并返回其索引?

C++ 如何在数组中查找特定值并返回其索引?,c++,arrays,C++,Arrays,伪代码: int arr[ 5 ] = { 4, 1, 3, 2, 6 }, x; x = find(3).arr ; 然后x将返回2 函数的语法没有意义(为什么返回值会有一个名为arr?)的成员) 要查找索引,请使用标题中的std::distance和std::find int x = std::distance(arr, std::find(arr, arr + 5, 3)); 或者,您可以将其转换为更通用的函数: template <typename Iter> siz

伪代码:

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

x = find(3).arr ; 

然后x将返回2

函数的语法没有意义(为什么返回值会有一个名为
arr
?)的成员)

要查找索引,请使用
标题中的
std::distance
std::find

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

如果数组未排序,则需要使用。

奇特的答案。使用std::vector并使用std::find进行搜索

简单的答案


使用for循环

这里有一个非常简单的手工操作方法。正如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;    
}
#包括
整数查找(整数arr[],整数len,整数seek)
{
对于(int i=0;i#包括
#包括
int main()
{
int-arr[5]={4,1,3,2,6};
int x=-1;
向量testVector(arr,arr+sizeof(arr)/sizeof(int));
std::vector::iterator it=std::find(testVector.begin(),testVector.end(),3);
if(it!=testVector.end())
{
x=it-testVector.begin();
}
返回0;
}
或者你可以用普通的方式构建一个向量,而不需要从一个int数组中创建它,然后使用与我的示例中所示相同的解决方案。

int-arr[5]={4,1,3,2,6};
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();
向量向量机; int i=0; int未找到任何要查找的对象; cin>>找不到要查找的对象; 而(i!=4) { 向量推回(arr[i]); i++; }
cout我们在这里使用简单的线性搜索。首先初始化索引为-1。然后搜索数组,如果找到索引,则在索引变量中分配索引值并断开。否则,索引为-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;
 }
int-find(int-arr[],int-n,int-key)
{
int指数=-1;

对于(inti=0;i,您可以使用提供的STL算法库的find函数

#include <iostream>
#include <algorithm>


using std::iostream;
using std::find;

int main() {
  int length = 10;
  int arr[length] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  
  int* found_pos = find(arr, arr + length, 5);
  
  if(found_pos != (arr + length)) {
    // found
    cout << "Found: " << *found_pos << endl;
  }
  else {
    // not found
    cout << "Not Found." << endl;
  }
  
  
  return 0;
}

#包括
#包括
使用std::iostream;
使用std::find;
int main(){
整数长度=10;
int arr[length]={1,2,3,4,5,6,7,8,9,10};
int*found_pos=find(arr,arr+length,5);
如果(找到位置!=(arr+长度)){
//发现

cout Index至少应该是一个无符号类型。是否确实要使用Index。使用某种形式的迭代器可能会更整洁。如果找不到搜索的值,您希望返回什么值?最佳答案:使用
std::find()
。请为您的答案添加一些解释,以便对其他读者更有用。
   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;
 }
#include <iostream>
#include <algorithm>


using std::iostream;
using std::find;

int main() {
  int length = 10;
  int arr[length] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  
  int* found_pos = find(arr, arr + length, 5);
  
  if(found_pos != (arr + length)) {
    // found
    cout << "Found: " << *found_pos << endl;
  }
  else {
    // not found
    cout << "Not Found." << endl;
  }
  
  
  return 0;
}