标准模板库学习(5)----算法之非修正序列算法

算法是STL的中枢,STL提供了算法库,算法库都是模板函数,主要分为四类,非修正序列算法、修正序列算法、排序算法和数值算法。本文介绍非修正序列算法。

adjacent_find(start,end)

这个函数是用来查找相邻的重复元素的,内部有两个参数,代表查找区间。

void test()
{
	multiset<int>s;
	s.insert(1);
	s.insert(3);
	s.insert(2);
	s.insert(4);
	s.insert(4);
	printSet(s);
	multiset<int>::iterator it = s.begin();
	cout << "查找相邻的重复数对:" << endl;
	it = adjacent_find(s.begin(),s.end());  //返回到迭代器
	cout << *it++ << endl;
	cout << *it << endl;
}

count(start,end,i)

表示计数,在区间start和end之间查找i的个数

	int num = count(s.begin(), s.end(), 4);
	cout << "查找的元素个数是:" << num << endl;

equal(start,end,start2)

判断区间是否相等。

bool num1 = equal(s.begin(), s.end(), ++s.begin());
	cout << num1 << endl;

for_each(start,end,func)

从区间中的各个元素执行func函数

void outPut(int val)
{
	cout << val <<" ";
}
..
for_each(++s.begin(),s.end(),outPut);

 mismatch(start,end,start2)

找出区间之间不一样的元素

pair<multiset<int>::iterator, multiset<int>::iterator>pr;
	pr = mismatch(s.begin(), s.end(), ++s.begin());
	cout << "第一个不吻合点:" << *pr.first << " ";
	cout << "和" << *pr.second << endl;

 常用的算法介绍结束,刚刚的全部测试代码如下,希望可以帮助大家:

#include<iostream>
using namespace std;
#include<set>
#include<algorithm>

void printSet(multiset<int>& s)
{
	for (multiset<int>::iterator it = s.begin(); it != s.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void outPut(int val)
{
	cout << val <<" ";
}

void test()
{
	multiset<int>s;
	s.insert(1);
	s.insert(3);
	s.insert(2);
	s.insert(4);
	s.insert(4);
	printSet(s);
	multiset<int>::iterator it = s.begin();
	cout << "查找相邻的重复数对:" << endl;
	it = adjacent_find(s.begin(),s.end());
	cout << *it++ << endl;
	cout << *it << endl;

	int num = count(s.begin(), s.end(), 4);
	cout << "查找的元素个数是:" << num << endl;

	bool num1 = equal(s.begin(), s.end(), ++s.begin());
	cout << num1 << endl;

	
	for_each(++s.begin(),s.end(),outPut);

	pair<multiset<int>::iterator, multiset<int>::iterator>pr;
	pr = mismatch(s.begin(), s.end(), ++s.begin());
	cout << "第一个不吻合点:" << *pr.first << " ";
	cout << "和" << *pr.second << endl;
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值