C++程序检查给定项目是否包含在数组中


数组是一种线性顺序数据结构,用于在连续的内存位置存储同构数据。与其他数据结构一样,数组也必须具备以某种有效方式插入、删除、遍历和更新元素的功能。在 C++ 中,我们的数组是静态的。C++ 中也有一些动态数组结构可用。对于静态数组,可以存储 Z 个元素。到目前为止,我们已经存储了 n 个元素。在本文中,我们将学习如何使用 C++ 检查元素是否存在于数组中。

通过示例理解概念

Given array A = [10, 14, 65, 85, 96, 12, 35, 74, 69]
Check whether 96 is present inside A or not. Yes, it is present, so return True.

在给定的示例中,我们有一个包含九个元素的数组 A。我们将检查元素 96 是否存在于 A 中。如果存在,则返回 true,否则对于不存在的元素返回 false。要检查元素是否在数组中,我们可以执行搜索。对于未排序的给定数组,我们需要执行线性搜索。让我们看看算法以更好地理解。

算法

  • 获取一个数组 A 和一个元素 k,以检查 e 是否在 A 中

  • 对于 A 中的每个元素 e,执行:

    • 如果 e 与 k 相同,则

      • 返回 true

    • 结束 if

  • 结束 for

  • 返回 false

示例

#include <iostream>
# define Z 50

using namespace std;

void displayArr(int arr[], int n){
   for( int i = 0; i < n; i++ ){
      cout << arr[ i ] << ", ";
   }
   cout << endl;
}
string isInsideArray( int A[], int n, int k ){
   for( int i = 0; i < n; i++) {
      if( A [ i ] == k ) {
         return "Yes";   
      }
   }
   return "No";
}

int main() {
   int arr[ Z ] = {57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14};
   int n = 12;
   
   cout << "Array elements: ";
   displayArr( arr, n );
   
   cout << "Is 86 inside the array? :";
   cout << isInsideArray( arr, n, 86 );
   
   cout << "\nIs 900 inside the array? :";
   cout << isInsideArray( arr, n, 900 );
   
   cout << "\nIs 65 inside the array? :";
   cout << isInsideArray( arr, n, 65 );
}

输出

Array elements: 57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14, 
Is 86 inside the array? :Yes
Is 900 inside the array? :No
Is 65 inside the array? :Yes

在 C++ STL 中使用向量

在上面的示例中,我们使用了静态数组,我们需要执行线性或顺序搜索来检查元素是否存在于数组中。在本节中,我们将使用来自 C++ STL 的向量。向量是动态数据结构,其中包含许多不同的函数。要搜索向量中的元素,我们可以使用 find() 方法。此方法包含在“algorithm”头文件中。让我们看看它的代码。

示例

#include <iostream>
#include <vector>
#include <algorithm>
# define Z 50

using namespace std;

void displayArr( vector<int> v ){
   for( int i = 0; i < v.size() ; i++ ){
      cout << v[ i ] << ", ";
   }
   cout << endl;
}

string isInsideArray( vector<int> A, int k ){
   if( find( A.begin(), A.end(), k ) != A.end() ) {
      return "Yes";
   }
   return "No";
}

int main() {
   vector<int> A = {57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14}; 
   
   cout << "Array elements: ";
   displayArr( A );
   
   cout << "Is 86 inside the array? :";
   cout << isInsideArray( A, 86 );
   
   cout << "\nIs 900 inside the array? :";
   cout << isInsideArray( A, 900 );
   
   cout << "\nIs 65 inside the array? :";
   cout << isInsideArray( A, 65 );
}

输出

Array elements: 57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14, 
Is 86 inside the array? :Yes
Is 900 inside the array? :No
Is 65 inside the array? :Yes

除了 find() 之外,我们还可以使用另一种方法来检查元素是否存在于向量中,即向量对象的默认 count() 函数。当计数为 0 时,表示元素不存在,否则表示元素存在。实现如下所示

示例

#include <iostream>
#include <vector>
#include <algorithm>
# define Z 50

using namespace std;

void displayArr( vector<int> v ){
   for( int i = 0; i < v.size() ; i++ ){
      cout << v[ i ] << ", ";
   }
   cout << endl;
}

string isInsideArray( vector<int> A, int k ){
   if( count( A.begin(), A.end(), k ) == 0 ) {
      return "No";
   }
   return "Yes";
}

int main() {
   vector<int> A = {57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14}; 
   
   cout << "Array elements: ";
   displayArr( A );
   
   cout << "Is 86 inside the array? :";
   cout << isInsideArray( A, 86 );
   
   cout << "\nIs 900 inside the array? :";
   cout << isInsideArray( A, 900 );
   
   cout << "\nIs 65 inside the array? :";
   cout << isInsideArray( A, 65 );
}

输出

Array elements: 57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14, 
Is 86 inside the array? :Yes
Is 900 inside the array? :No
Is 65 inside the array? :Yes

结论

在本文中,我们学习了如何检查元素是否存在于数组中。我们使用了静态数组和向量。对于静态数组,我们使用线性搜索方法搜索数组。由于我们认为数组中的元素未排序,因此使用线性搜索。否则,我们可以对排序数据使用二分搜索。在第二种和第三种方法中,我们使用向量,并使用 find() 和 count 方法来检查元素是否存在于向量中。可能还有一些其他方法可以使用 STL 使用集合或 set_intersection() 来实现相同的功能。

更新于:2022年12月13日

5K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告