元素计数算法

//元素计数算法
#include<iostream>
#include<set>
#include<string>
#include<vector>
#include<algorithm>
#include<functional>

using namespace std;

//返回值是布尔的叫做谓词
//只有一个参数,叫做一元谓词
bool isEven(int elem)
{ 
	return elem % 2 == 0;//偶数除以2才等于0
}

int main()
{
	vector<int> ivec;
	for (int i = 1; i <= 9; ++i)
	{
		ivec.push_back(i);
	}
	ivec.push_back(4);
	ivec.push_back(4);
	ivec.push_back(4);

	for (auto i = ivec.begin(); i != ivec.end(); ++i)
		cout << *i << " ";
	cout << endl;

	int num;
	num = count(ivec.begin(), ivec.end(), 4);
	cout << "have" << num << "个" << "4" << endl;

	num = count_if(ivec.begin(), ivec.end(), isEven);
	cout << "有" << num << "个偶数" << endl;
	//函数对象可以自己做,也可以用预定义的
	//预定义的函数对象和预定义的函数适配器。组合在一起
	//                                    函数适配器(函数对象(函数对象有小括号)
	num = count_if(ivec.begin(), ivec.end(), bind2nd(greater<int>(), 4));//判断有多少个数大于4
	cout << "有" << num << "个数大于4" << endl;
	int n,n1;   
	//                                            param1 % 2                 
	n = count_if(ivec.begin(), ivec.end(), not1(bind2nd(modulus<int>(), 2)));
	cout << "yu " << n << "个oushu数" << endl;
	n1 = count_if(ivec.begin(), ivec.end(), bind2nd(modulus<int>(), 2));
	cout << n1 << endl;;


	multiset<int> mset;
	for (int i = 1; i <= 9; ++i)
	{
		mset.insert(mset.end(), i);
	}
	mset.insert(7);
	mset.insert(7);
	mset.insert(7);
	mset.insert(2);

	for (multiset<int>::iterator iter = mset.begin(); iter != mset.end(); ++iter)
	{
		cout << *iter << " ";
	}
	cout << endl;
	
	//去查看数字的数目
	int num1, num2;

	num1 = count(mset.begin(), mset.end(), 7);//count速度慢
	cout << "数字有几个7::"<<num1 << endl;
	
	num2 = mset.count(7);//速度快,set会自动排序的红黑树,会利用已经排序的特点,用快速的方法计数,而类似于二分查找
    cout << num2 << endl;

	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42655231/article/details/82779507