c++学习笔记(26)

常用算法:
概述:
算法主要是由头文件,algorithm,functional,numeric组成
algorithm是所有STL头文件中最大的一个,范围涉及到比较,交换,查找,便利操作,赋值,修改等等
numeric体积很小,只包括几个在序列上面进行简单数学运算的模板函数
functional定义了一些模板类,用以声明函数对象
常用遍历算法:
算法简介:
for_each 遍历容器
transform 搬运容器到另一个容器中

#include
#include
void print1(int val)
{
	cout<<val<<endl;
}
class print2
{
public:
	void operator()(int val)
	{
		cout<<val<<" ";
	}
};
void test1()
{
	vector<int>v;
	for_each(v.begin(),v.end(),print1);

	for_each(v.begin(),v.end(),print2());
}

transform
搬运容器到另一个容器中
函数原型:
transform(iterator beg1,iterator end1,iterator beg2,_func);
beg1 源容器开始迭代器
end1 源容器结束迭代器
beg2 目标容器开始迭代器
_func 函数或者函数对象

#include
#include
class transform
{
public:
	int operator()(int val)
	{
		return val;
		//将原函数的值返回去,进行拷贝操作
	}	
};
void test1()
{
	vector<int>v;
	for(int i = 0;i<10;i++)
	{
		v.push_back(i);
	}
	vector<int>target;
	//重点 一定要提前开辟空间
	target.resize(v.size());
	transform(v.begin(),v.end(),target.begin(),transform());
	for_each(target.begin(),target.end(),print2);
}

常用的查找算法:
算法简介:
find 查找元素
find_if 按条件查找元素
adjacent_find 查找相邻重复元素
binary_search 二分查找法
count 统计元素个数
count_if 按条件统计元素个数

find
查找指定元素,找到返回指定元素的迭代器,找不到返回结束迭代器end()
函数原型:
find(iterator beg,iterator end,value);
按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
beg开始迭代器
end结束迭代器
value查找的元素

vector<int>v;
vector<int>::iterator it = find(v.begin(),v.end(),5);

class person
{
public:
	string m_name;
	int m_age;
	bool operator==(const person&p)
	{
		if(this->m_name == p.m_name&&this->m_age == m_age)
		{
			return true;
		}
		else
		{
			return false;
		}
	}	
};
vector<person>v1;
person p1("aaa",10);
v1.push_back(p1);
vector<int>::iterator it = find(v.begin(),v.end(),p2);
//查找自定义数据类型时,需要重载==号
//是通过对象的内容来对比的,而不是变量名
cout<<it->m_name<<it->m_age<<endl;

你可能感兴趣的:(c++学习笔记(26))