C++如何使用std::search(代码示例)

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通过激烈的问题解决过程来训练和掌握这些概念。

    推荐阅读