C++体系结果

网站

cplusplus,com 
cppreference.com
gcc.gnu.org

STL 六大部件(Components)

容器(containers):存放数据的地方。
分配器(allocators):数据需要内存地址需要分配器来实现,分配器一般作用在容器中
算法(algorithms): 实现数据的处理
迭代器(iterator): 数据不能处理容器,而是容器内的数据,迭代器负责区获取容器内的数据
适配器(adapters):数据之间的转换使用到适配器
仿函式(functors): 像函数的处理方式的类

容器(containers)

STL 要求容器都是“前闭后开”形式,即 container<T> c, c.begin() 指向 容器的第一个元素,c.end() 指向 容器最后一个元素的下一个空元素,不能对 c.end() 进行操作,是未知的。

顺序容器(sequence containers)

Arrary :数组,在 C++11中,将数组封装为一个类,创建大小不会在改变
Vector:向量,向量容器大小会往后增长。vector一开始的大小为0,但是随着空间的增大,空间的增长是两倍的增长。
Deque:双队列,两边都可以增长,Deque 内部实现是使用多个buf组成,空间不够,就会增加一个buf.
List:链表,内存不连接,双向链表
Forward-list: 单向链表,

关联式容器(associative containers)

关联式容器便于查找,在查找中,红黑树是一个自动调正左右两边相对于平衡的树,大部分的关联容器都使用红黑树实现。
Set/Multiset:集合,存放数据。Multiset 表示可以存放重复的值。
Map/Multimap:key-value,一个节点中分为两部分k-v。Multimap 表示可以存放重复的值。

不定序容器(unordered)

不定序容器底部是用hashtable来形成的,hashtable有一个规定是当元素的个数大于篮子个数时,篮子的个数就要往上增长。

STL容器必须要的重新定义的五个类型

目的是在算法中,算法会询问容器的类型,根据类型进行相应的运算
typedef X1 iterator_category; 	//适配器的类型
typedef X2 value_type; //容器存放的类型
typedef X3 difference_type;
typedef X4 pointer; //容器存放类型的指针
typedef X5 reference; //容器存放类型的引用

迭代器分类

按照移动能力进行分类:
struct output_iterator_tag { }; //输出类型
struct input_iterator_tag { }; //输入类型
struct farword_iterator_tag : public input_iterator_tag { }; //单向类型
struct bidirectional_iterator_tag : public farword_iterator_tag { };//双向类型
strcut random_iterator_tag : public bidirection_iterator_tag { }; //随机类型

各个容器属于五种类型中如下:
	array 是 随机类型
	vector 是 随机类型
	list 是 双向类型
	farword_list 是 单向类型
	deque 是 随机类型(虽然内部实现是多个buff,但是使用上是随机类型)
	set/multiset 是 双向类型
	map/multimap 是双向类型
	unordered_set/unordered_multiset / unordefed_map/ unordered_multimap 看元素的node是双向链表来实现还是单向链表实现

通过对象可以打印对象类型的
#include <typeinfo>
关键字 typeid
class A { };
A a;
cout <<  typeid.name(a) ;// 会打印 a对象的type类型,在c++中,我们的函数和类的名称在面一起编译后的名称不相同,但是是一 一 对应,且我们可以大体看出来。

仿函数

当我们要为STL 算法提供自己的仿函数时。我们的 类要继承 一下两个类。继承之后适配器就可以回答适配的询问,这个逻辑像算法询问迭代器,迭代器必须要有相应的typedef 相应的数据类型一样。
template<class Args, class Result>
struct unary_function{
	typedef Arg argument_type;
	typedef Result result_type;
};

template<class Arg1, class Arg2, class Tesult>
struct binary_function{
	typedef Arg1 first_argument_type;
	typedef Arg2 second_argument_type;
	typedef Result result_type;
};

适配器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值