STL 学习笔记

本文详细介绍了STL的学习笔记,涵盖了语法中的explicit作用,迭代器的使用,包括back_inserter、插入迭代器和流迭代器等。接着探讨了算法的应用,强调了使用迭代器的注意事项,以及在关联式容器中的限制。最后讲解了仿函数的概念,如greater<>仿函数,并阐述了其在STL中的位置和应用。
摘要由CSDN通过智能技术生成

一、语法

1、explicit的作用

explicit可以禁止单参数构造函数被自动用于型别转换和采用赋值方式的带有型别转换的初始化。实例如下:

#include <stdlib.h>
class stack
{
public:
	stack()
	{
		this->capacity=0;
		p=NULL;
	}
	stack(int n)
	{
		if(n>0)
		{
			this->capacity=n;
			p=new int[n];
		}
		else
		{
			p=NULL;
			capacity=0;
		}
	}
private:
	int capacity;
	int *p;
};
这段代码定义了stack类,其接受一个int型变量初始化大小。但是,在这种情况下,有下面两个表达式:

#include "explict.h"
int main()
{
	stack s1(10);//容量大小为10
	stack s2=10;//将10转换为stack
	return 0;
}

其中第二个表达式将“10”转化为了stack,这在一般情况下都是不符合我们的意思的。加上explicit以后,代码如下:

#include <stdlib.h>
class stack
{
public:
	stack()
	{
		this->capacity=0;
		p=NULL;
	}
	explicit stack(int n)
	{
		if(n>0)
		{
			this->capacity=n;
			p=new int[n];
		}
		else
		{
			p=NULL;
			capacity=0;
		}
	}
private:
	int capacity;
	int *p;
};
这时,表达式“stack s2=10;”会产生编译错误,意思无法将int转为stack。


二、迭代器

1、vs实现的STL将back_inserter放在了iterator头文件里

2、STL中的特殊迭代器

(1)插入迭代器 Insert Iterator
一般的迭代器都是指向某个已存在元素的位置或者最后一个元素的下一个位置。而插入迭代器可以指向用于插入操作的位置。换句话说,此位置当前并不属于容器,也没有有效的元素。然而,相关插入算法可以利用插入迭代器完成插入操作。
插入迭代器包括back_inserter、front_inserter和inserter。
back_inserter用于支持push_back的容器(list、vector和deque),front_inserter用于支持push_front的容器(list和deque);inserter作用是将元素插入指定的位置(用于支持insert的容器,而所有的容器都支持insert)。示例代码如下:
        typedef vector<int> intVector;
	typedef list<int> intList;
	typedef deque<int> intDeque;
	typedef set<int> intSet;
	typedef multiset<int> intMultiset;
	typedef map<int,int> intMap;
	typedef multimap<int,int> intMultimap;
	
	intVector vec;
	intList list;
	intDeque deque;
	intMap map;
	intSet set;
	intMultimap mulmap;
	intMultiset mulset;
	
	for(int i=1;i<=10;++i)
	{
		vec.push_back(i);
	}
	copy(vec.begin(),vec.end(),back_inserter(list));   //将vec内的元素插入list尾部
	copy(vec.begin(),vec.end(),front_inserter(deque)); //将vec元素插入deque头部
        copy(vec.begin(),vec.end(),insert(mulset,mulset.begin()));//将vec元素插入multiset的起始位置
(2)流迭代器 Stream Iterator
流迭代器是用于读写stream的迭代,包括ostream_iterator和istream_iterator。其中istream_iterator与输入流关联,从输入流中读取数据;ostream_iterator与输出流关联ÿ
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值