在C++中查找Vector中的成员函数
与任何其他语言中的数组类似,c++中的vector也是动态的;因此它的大小不是恒定的。为什么要使用向量?由于c++数组是静态的,并且在定义后不能更改其宽度,因此在存储大小未知的数据集时,这并不理想。
示例:
输出:
解释
如果元素索引在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是我们要查找的元素的位置索引。键索引将取决于跳数。
示例:
输出:
解释
-
第2-8行:我们声明了一个结构比较,它根据int k计算实参的值。
-
第9行:声明了一个searchResult函数,它的输入参数是一个向量和一个键。
-
第10行:这一次,我们使用了STL库的find if方法,并传递了一个比较结构,键k作为参数,以及指向向量的开始(arr.cbegin())和结束(arr.cend())的常量随机访问迭代器。