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

在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 seconds
Press 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 seconds
Press any key to continue.

解释

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

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

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程