STL_算法与迭代器

STL_算法

  算法是STL的重要组成部分。STL提供了大约100个实现算法的模板函数,用户可以通过调用算法模板完成所需的功能。
  一般来说,STL中的算法部分主要由头文件< algorithms>,< numeric>,< functional>组成。其中,头文件< algorithms>由模板函数组成,常见的函数涉及比较,交换,查找,排序等。
sort在< algorithm>库里面,原型如下:
  下面是一个使用STL中排序算法的实例:

  1. sort在< algorithm>库里面,原型如下:
template < class RandomAccessIterator>
void sort ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
  1. sort函数有两种形式,一种有两个参数,一种有三个参数,sort的前两个参数是起始地址和终止地址,表示对a[0] a[1] a[2] … a[n-1] 排序。
  2. sort函数中:返回值为false,交换;为true,不交换。
  3. 第三个参数是当你需要按照某种特定方式进行排序时,你需要给sort指定比较函数:
    bool cmp(int a,int b) { return a<b; }
    然后调用: sort(vect.begin(),vect.end(),cmp);后可以进行排序。
#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>

using namespace std;

class myclass{
	public:
		int first;
		int second;
		myclass(int a,int b):first(a),second(b){  }
		//这里重载了<运算符,使类之间的first,second也可以用" < "比较大小 
		bool operator<(const myclass& m)const   //bool类型,只返回0或1
		{
			return first<m.first;  
		}
};

bool less_second(const myclass& m1,const myclass& m2)
{
	//sort三个参数的实现是:为false,交换;为true,不交换。
	return m1.second<m2.second;   //即这里是升序排序
}

int main()
{
	vector<myclass> vect;  //创建了一个vect向量容器,类模板vector中传递的实际类型是myclass类 
	for(int i=0;i<10;i++)  //循环创建了10个对象,并给每个对象的first和second都赋了不同的值
	{
		myclass my(10-i,i*3);
		vect.push_back(my);  //向末端插入对象 
	}	
	for(int i=0;i<vect.size();i++)  //打印容器内的信息 
	{
		cout<<"("<<vect[i].first<<","<<vect[i].second<<")"<<endl;
	}
	sort(vect.begin(),vect.end()); //调用排序算法,传递了向量开始与结束元素的游标 
	cout<<"after sorted by first:"<<endl;
	for(int i=0;i<vect.size();i++)
	{
		cout<<"("<<vect[i].first<<","<<vect[i].second<<")"<<endl;
	}
	
	cout<<"after sorted by second:"<<endl;
	sort(vect.begin(),vect.end(),less_second); 
	for(int i=0;i<vect.size();i++)
	{
		cout<<"("<<vect[i].first<<","<<vect[i].second<<")"<<endl;
	}
	return 0;
} 

运行结果:
/

迭代器

  迭代器实际上一种泛化指针,如果一个迭代器指向了容器中的某一成员,那么迭代器可以通过自增和自减来遍历容器中的所有成员。迭代器是联系容器和算法的媒介,是算法操作容器的接口。
  简单来说,STL提供的所有算法几乎都是通过迭代器存取元素序列进行工作的,每一个容器都定义了它本身所专有的迭代器,用以存取容器中的元素。
  STL中的迭代器主要由头文件< utility>,< iterator>,< memory>组成。其中,< utility>包括了贯穿使用在STL中的几个模板的声明,< iterator>头文件中提供了迭代器使用的许多方法。< memory>头文件中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值