std::search在头文件<
algorithm>
中定义了, 用于针对另一个序列找出满足条件(如果未定义这样的谓词, 则等于)的子序列的存在。
- 它在序列[first1, last1)中搜索由[first2, last2)定义的子序列的第一个匹配项, 然后将一个迭代器返回到该匹配项的第一个元素, 如果没有找到匹配项, 则返回last1。
- 它使用operator ==(版本1)或基于任何给定谓词(版本2)顺序比较两个范围内的元素。仅当[first2, last2)的所有元素都为true时, 才将[first1, last1)的子序列视为匹配。最后, std :: search返回第一个这样的事件。
为了使用==比较元素:
ForwardIterator1搜索(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2); first1:将迭代器转发到要搜索的第一个容器的开头。 last1:将迭代器转发到要搜索的第一个容器的末尾。 first2:将迭代器转发到要搜索的第二个容器的子序列的开头。 last2:将迭代器转发到要搜索的第二个容器的子序列的末尾。返回:对[first1, last1)中第一个[first2, last2)的第一个元素的迭代器的迭代器;如果找不到任何匹配项, 则返回last1。
// C++ program to demonstrate the use of std::search#include <
iostream>
#include <
vector>
#include <
algorithm>
using namespace std;
int main()
{
int i, j;
// Declaring the sequence to be searched into
vector<
int >
v1 = { 1, 2, 3, 4, 5, 6, 7 };
// Declaring the subsequence to be searched for
vector<
int >
v2 = { 3, 4, 5 };
// Declaring an iterator for storing the returning pointer
vector<
int >
::iterator i1;
// Using std::search and storing the result in
// iterator i1
i1 = std::search(v1.begin(), v1.end(), v2.begin(), v2.end());
// checking if iterator i1 contains end pointer of v1 or not
if (i1 != v1.end()) {
cout <
<
"vector2 is present at index " <
<
(i1 - v1.begin());
} else {
cout <
<
"vector2 is not present in vector1" ;
}return 0;
}
输出如下:
vector2 is present at index 2
为了基于谓词(或条件)进行比较:
ForwardIterator1搜索(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 所有参数都与以前的模板相同, 只是在pred上添加了一个参数:二进制函数, 接受两个元素作为参数(两个容器中的每个容器, 以相同的顺序), 并返回可转换为bool的值。返回的值指示在此函数的上下文中是否认为元素匹配。该函数不得修改其任何参数。这可以是一个函数指针或一个函数对象。返回:一个迭代器, 该迭代器在[first1, last1)中返回满足谓词的[first2, last2)的第一个匹配项的第一个元素, 如果找不到任何匹配项, 则返回last1。
// C++ program to demonstrate the use of std::search
// with binary predicate
#include <
iostream>
#include <
vector>
#include <
algorithm>
using namespace std;
// Defining the BinaryPredicate function
bool pred( int i, int j)
{
if (i >
j) {
return 1;
} else {
return 0;
}
}int main()
{
int i, j;
// Declaring the sequence to be searched into
vector<
int >
v1 = { 1, 2, 3, 4, 5, 6, 7 };
// Declaring the subsequence to be compared to based
// on predicate
vector<
int >
v2 = { 3, 4, 5 };
// Declaring an iterator for storing the returning pointer
vector<
int >
::iterator i1;
// Using std::search and storing the result in
// iterator i1 based on predicate pred
i1 = std::search(v1.begin(), v1.end(), v2.begin(), v2.end(), pred);
// checking if iterator i1 contains end pointer of v1 or not
if (i1 != v1.end()) {
cout <
<
"vector1 elements are greater than vector2 starting "
<
<
"from position " <
<
(i1 - v1.begin());
} else {
cout <
<
"vector1 elements are not greater than vector2 "
<
<
"elements consecutively." ;
}return 0;
}
输出如下:
vector1 elements are greater than vector2 starting from position 3
相关文章:
- std :: search_n
- std ::查找
- std :: find_if, std :: find_if_not
- std :: nth_element
- std :: find_end
【C++如何使用std::search(代码示例)】被认为是行业中最受欢迎的技能之一, 我们拥有自己的编码基础C ++ STL通过激烈的问题解决过程来训练和掌握这些概念。
推荐阅读
- AngularJS指令完整参考指南
- Python Numpy介绍和用法经典指南
- JavaScript中的函数介绍和用法详细指南
- 如何TCP和UDP之间的区别()
- 如何实现SSTF磁盘调度算法程序()
- jQuery如何使用jTippy工具提示插件()
- 高盛面试经验分享(经验丰富)
- 电脑公司win7旗舰版笔记本系统32位最新系统推荐
- 雨林木风win7企业版iso64位装机版最新系统推荐