std :: search在头文件
- 它在序列[first1,last1)中搜索由[first2,last2)定义的子序列的第一个匹配项,然后将迭代器返回到该匹配项的第一个元素,如果没有找到匹配项,则返回last1。
- 它使用运算符==(版本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.Returns: 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
#include #include using namespace std; int main() { int i, j; // Declaring the sequence to be searched into vector v1 = { 1, 2, 3, 4, 5, 6, 7 }; // Declaring the subsequence to be searched for vector v2 = { 3, 4, 5 }; // Declaring an iterator for storing the returning pointer vector ::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.
Returns: 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
#include #include 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 v1 = { 1, 2, 3, 4, 5, 6, 7 }; // Declaring the subsequence to be compared to based // on predicate vector v2 = { 3, 4, 5 }; // Declaring an iterator for storing the returning pointer vector ::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