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

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

      重复元素子序列搜索search_n算法:搜索序列中是否有一系列元素值均为某个给定值的子序列,它有如下两个函数原型,分别在迭代器区间[first, last)上搜索是否有count个连续元素,其值均等于value(或者满足谓词判断binary_pred的条件),返回子序列首元素的迭代器,或last以表示没有重复元素的子序列。

     函数原型:

template<class ForwardIterator1, class Diff2, class Type>
   ForwardIterator1 search_n(
      ForwardIterator1 _First1, 
      ForwardIterator1 _Last1,
      Size2 _Count, 
      const Type& _Val
   );
template<class ForwardIterator1, class Size2, class Type, class BinaryPredicate>
   ForwardIterator1 search_n(
      ForwardIterator1 _First1, 
      ForwardIterator1 _Last1,
      Size2 _Count, 
      const Type& _Val,
      BinaryPredicate _Comp
   );
 


    示例程序:

     搜索向量容器ivect = {1,8,8,8,4,,4,3}中有三个连续元素为8,没有四个连续元素8,以及有三个连续元素的两倍为16.

/*******************************************************************
 * Copyright (C) Jerry Jiang            
 * File Name   : search_n.cpp
 * Author      : Jerry Jiang
 * Create Time : 2011-10-11 22:23:47
 * Mail        : jbiaojerry@gmail.com
 * Blog        : http://blog.csdn.net/jerryjbiao              
 * Description :  简单的程序诠释C++ STL算法系列之十一                
 *                非变易算法 : 重复元素子序列搜索search_n      
 ******************************************************************/

#include <algorithm>
#include <vector>
#include <iostream>

bool twice(const int para1, const int para2)
{
	return 2 * para1 == para2;
}

using namespace std;

int main()
{
	vector<int> ivect;
	ivect.push_back(1);
	ivect.push_back(8);
	ivect.push_back(8);
	ivect.push_back(8);
	ivect.push_back(4);
	ivect.push_back(4);
	ivect.push_back(3);

	vector<int>::iterator iLocation;
	iLocation = search_n(ivect.begin(), ivect.end(), 3, 8);
	if (iLocation != ivect.end())
	{
		cout << "在ivect中找到3个连续的元素8" << endl;
	}
	else
	{
		cout << "在ivect中没有3个连续的元素8" << endl;
	}

	iLocation = search_n(ivect.begin(), ivect.end(), 4, 8);
	if (iLocation != ivect.end())
	{
		cout << "在ivect中找到4个连续的元素8" << endl;
	}
	else
	{
		cout << "在ivect中没有4个连续的元素8" << endl;
	}

	iLocation = search_n(ivect.begin(), ivect.end(), 2, 4);
	if (iLocation != ivect.end())
	{
		cout << "在ivect中找到2个连续的元素4" << endl;
	}
	else
	{
		cout << "在ivect中没有2个连续的元素4" << endl;
	}

	iLocation = search_n(ivect.begin(), ivect.end(), 3, 16, twice);
	if (iLocation != ivect.end())
	{
		cout << "在ivect中找到3个连续元素的两倍为16" << endl;
	}
	else
	{
		cout << "在ivect中没有3个连续元素的两倍为16" << endl;
	}
	return 0;
}


 *******************************************************************************************************************************

C++经典书目索引及资源下载:http://blog.csdn.net/jerryjbiao/article/details/7358796

********************************************************************************************************************************

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值