在C++中查找Vector中的成员函数

来源:这里教程网 时间:2026-02-16 16:08:00 作者:

在C++中查找Vector中的成员函数

与任何其他语言中的数组类似,c++中的vector也是动态的;因此它的大小不是恒定的。为什么要使用向量?由于c++数组是静态的,并且在定义后不能更改其宽度,因此在存储大小未知的数据集时,这并不理想。

示例:

#includ < bits / stdc++.h >#includ < stdlib >#includ < stdio.h >#includ < vector >#includ < conio.h >int searchResult ( std : : vector < int > arr , int k ) {     std : : vector < int > : : iterator it ;    it = std : : find ( arr . begin ( ) , arr . end ( ) , k ) ;    if ( it ! = arr . end ( ) )        return ( it - arr . begin ( ) ) ;    else        return -1 ;}int main ( ) {    std : : vector < int > arr = { 1 , 2 , 3 , 4 , 5 , 6 } ;    int k = 4 ;    std : : cout << searchResult ( arr , k ) << std : : endl ;    return 0 ;}

输出:

3.........................................Process executed in 1.22 secondsPress any key to continue.

解释

如果元素索引在vector容器中,则返回该元素的索引;否则,它返回-1。

第1行:指定的头文件包含我们需要的locate函数,以及每个c++标准库。第2行:我们定义了一个函数,它有两个输入:一个要搜索的向量和一个要搜索的键。第3行:对于vector,声明一个迭代器。它指定了向量的内存地址。它将被用来遍历向量。本文末尾提供的链接可以让您了解关于迭代器的更多信息。第4行:调用std::find方法,它将返回一个包含键k在vector中的位置的迭代器。第5行到第8行:在这里,我们做了一个if测试来确定该元素是否在vector中。如果是,我们返回它的位置;否则,返回-1,表示它不是。

函数调用遍历了向量中的n个元素,以找到我们要找的键,因此时间复杂度是线性的O(n)。

通过迭代遍历空间复杂度为常数O(1)的向量来执行简单的比较。

使用std::distance()帮助std::find_if()

如果搜索需要满足特定的逻辑,例如使用素数逻辑查找向量中元素的索引,则建议使用此方法查找向量中的元素。

当我们的谓词(compare struct)对第一个到最后一个范围内的任何元素返回true时,std::find if()将向该元素传递一个迭代器。如果没有这样的键,函数将返回end(last),指向last的过去点。

从第一到最后的跳数由std::distance()返回。在我们的例子中,它给出了从vector的开头到迭代器的键k的跳跃数,k是我们要查找的元素的位置索引。键索引将取决于跳数。

示例:

# include < bits / stdc++.h >struct compare {    int k ;    compare ( int const & i ) : k ( i ) { }    bool operator ( ) ( int const & i ) {        return ( i = = k ) ;    }} ;int searchResult ( std : : vector < int > arr , int k ) {    auto itr = std : : find_if ( arr . cbegin ( ) , arr . cend ( ) , compare ( k ) ) ;    if ( itr ! = arr . cend ( ) )        return std : : distance ( arr . cbegin ( ) , itr ) ;    return -1 ;}int main ( ) {    std : : vector < int > arr = { 1 , 2 , 3 , 4 , 5 , 6 } ;    int k = 4 ;    std : : cout << searchResult ( arr , k ) << std : : endl ;    return 0 ;}

输出:

3.........................................Process executed in 1.33 secondsPress any key to continue.

解释

第2-8行:我们声明了一个结构比较,它根据int k计算实参的值。

第9行:声明了一个searchResult函数,它的输入参数是一个向量和一个键。

第10行:这一次,我们使用了STL库的find if方法,并传递了一个比较结构,键k作为参数,以及指向向量的开始(arr.cbegin())和结束(arr.cend())的常量随机访问迭代器。

相关推荐