std::search在头文件<algorithm>中定义,用于查找满足另一个序列的条件(如果未定义此谓词,则等于)的子序列。
- 它在序列[first1,last1)中搜索由[first2,last2)定义的子序列的第一个匹配项,然后将一个迭代器返回到该匹配项的第一个元素,如果没有找到匹配项,则返回last1。
- 它使用operator ==(版本1)或基于任何给定谓词(版本2)顺序比较两个范围内的元素。仅当[first2,last2)的所有元素都为true时,才将[first1,last1)的子序列视为匹配。最后,std::search返回此类事件中的第一个。
可以在两个版本的任何一个中使用它,如下所示:
- 为了使用==比较元素:
ForwardIterator1 search (ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2, ForwardIterator2 last2);
first1:
Forward iterator to beginning of first container to be searched into.
last1:
Forward iterator to end of first container to be searched into.
first2:
Forward iterator to the beginning of the subsequence of second container to be searched for.
last2:
Forward iterator to the ending of the subsequence of second container to be searched for.
返回: an iterator to the first element of the f
irst occurrence of [first2, last2) in [first1, last1), or last1
if no occurrences are found.// 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 search (ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2, ForwardIterator2 last2,
BinaryPredicate pred);All the arguments are same as previous template, just one more argument is added
pred:Binary function that accepts two elements as arguments (one of each of the two containers, in the same order), and returns a value convertible to bool. The returned value indicates whether the elements are considered to match in the context of this function. The function shall not modify any of its arguments. This can either be a function pointer or a function object.
返回:an iterator, to the first element of the first occurrence of [first2, last2) satisfying a predicate, in [first1, last1), or last1 if no occurrences are found.
// 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 in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。