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() 来实现相同的功能。