简单的程序诠释C++ STL算法系列之十:search

2014-11-24 12:41:18 · 作者: · 浏览: 0

C++STL的非变易算法(Non-mutating algorithms)是一组不破坏操作数据的模板函数,用来对序列数据进行逐个处理、元素查找、子序列搜索、统计和匹配。

search算法函数在一个序列中搜索与另一序列匹配的子序列。它有如下两个原型,在迭代器区间[first1, last1)上找迭代器区间[first2, last2)完全匹配(或者满足二元谓词binary_pred)子序列,返回子序列的首个元素在[first1, last1)区间的迭代器值,或返回last1表示没有匹配的子序列。

函数原型:

template

ForwardIterator1 search(

ForwardIterator1 _First1,

ForwardIterator1 _Last1,

ForwardIterator2 _First2,

ForwardIterator2 _Last2

);

template

ForwardIterator1 search(

ForwardIterator1 _First1,

ForwardIterator1 _Last1,

ForwardIterator2 _First2,

ForwardIterator2 _Last2

BinaryPredicate _Comp

);

示例程序:

在vector向量容器v1 = {5,8,1 ,4}中搜索是否包含子序列容器向量V2 = {8,1},打印搜索结果“v2的元素包含在v1中,起始元素为:v1[1] ”

/*******************************************************************

* Copyright (C) Jerry Jiang

* File Name : search.cpp

* Author : Jerry Jiang

* Create Time : 2011-10-10 23:22:34

* Mail : jbiaojerry@gmail.com

* Blog : http://blog.csdn.net/jerryjbiao

* Description : 简单的程序诠释C++ STL算法系列之十

* 非变易算法: 子序列搜索search

******************************************************************/

#include

#include

#include

using namespace std;

int main()

{

vector v1;

v1.push_back(5);

v1.push_back(8);

v1.push_back(1);

v1.push_back(4);

vector v2;

v2.push_back(8);

v2.push_back(1);

vector::iterator iterLocation;

iterLocation = search(v1.begin(), v1.end(), v2.begin(), v2.end());

if (iterLocation != v1.end())

{

cout << "v2的元素包含在v1容器中,起始元素为"

<< "v1[" << iterLocation - v1.begin() << "]" <

}

else

{

cout << "v2的元素不包含在v1容器" << endl;

}

return 0;

}

摘自:Jerry.Jiang的程序人生