STL结构图
2016-04-07 00:22:46 14 举报
AI智能生成
STL结构思维导图简要描述,罗列了空间配置,迭代,后序完善
作者其他创作
大纲/内容
空间配置器
set_new_handler机制
空间配置标准接口allocator
address
allocate
deallocate
construct
destroy
SGI空间配置器
配置器》文件stl_alloc.h
一级_malloc_alloc_template
二级_default_alloc_template
构造方法》文件stl_construct.h
construct()
destroy()
全局填充函数》文件stl_uninitailized.h
un_initialized_copy()
un_initalized_fill()
un_initialized_fill_n()
泛化方案:类型萃取得到value_type
调用型别萃取__type_traits::isPOD()
_true_type调用高效处理
_false_type逐一处理
迭代器及类型萃取
迭代器
概论:重载*&等为泛化编程,统一处理提供套路
实现:①内部含有一个与容器关联的元素
②实现相关方法,达到泛化调用
迭代器型别辨别:template推演机制(只能推到参数,无效于返回值)
类型萃取
对返回值进行类型萃取辨别
注:若要类型催成功,类必须遵循约定,定义相关类型
iterator_traits萃取迭代器特性
value_type(基本数据类型)
difference_type(距离类型)
pointer
reference
iterator_category(根据移动特性与施行操作分)
InputIterator++
OutputIterator
ForwardIterator++
BidirectionalIterator++--
RandomIterator+=-=
注:STL算法命名规则,以算法所能接受最初迭代器类型为迭代器命名(命名约定,具体则是模板推演)
traits编程技巧原理:利用内嵌类型与template推导增强C++类型识别
三个方法求得类型
value_type
iterator_category
distance_type
__type_traits萃取型别特性
has_traivial_default_constructor
has_traivial_copy_constructor
has_traivial_assignment_operator
has_traivial_destructor
is_POD
注:内部定义__true_type,__false_type进行类型辨别
eg uninitailized_fill_n()
__uninitailized_fill_n()判定isPOD()
__true_type
fill_n()
__false_type
for()construct()
扩展:高效算法实现
①接受范围迭代器参数的公开算法
②对迭代器型别萃取iterator_traits得到iterator_category
根据iterator_category选择适合的函数调用
序列式容器
deque
array(build-in)
vector内部顺序表实现
heap
priority-queue
list双向循环链表【}
slist(非标准)
配接方式
stack
queue
基本操作:增删查改
关联式容器
RB-tree(非公开
set
map
multiset
multimap
非标准
hashtable
hash_set
hash_map
hash_multiset
hash_multimap
算法
copy
仿函数--策略模式
可配接的关键--相应型别的判定
unary_function
binary_funtion
功能划分
算术
plus
minus
multiplies
divides
modulus
negate
运算的证同元素:运算结果为本身
乘法1,加法0....
T identity_element(plus){return T(0)}
关系
equal_to
not_equal_to
less
greater
less_equal
greater_queal
逻辑
logical_and
logical_or
logical_not
证同/选择/投射
identity
(继承unary_fuction)参数原样返回
select
(继承unary_function)接受参数pair返回第一或者第二参数
project
(继承binary_fuction)接受两个参数,忽略一个,返回一个
配接器
轴承,转换器
container adapters
stack
queue
iterator adapters
insert iterator(表面赋值,实质插入)
back_insert_iterator实质:重载operator = ()转调用底层容器的push_back
front_insert_iterator实质,operator=转调push_front
注:这里关闭operator*++--操作。直接返回*this
reverse iterator(双向容器的rbegin,rend)
stream iterator将迭代器绑定到数据流对象身上
子主题
fuctor adapters
bind
eg:not1(bind2nd(less,12))不小于12的算法
negate
否定
compose
f(g(elm))->compose1(f(x),g(y));
子主题
注:所有期望获得配接能力的组件,本身必须是可配接的:继承自unary_function或者binary_function,成员函数以mum_fun处理过,一般函数以ptr_fun处理
0 条评论
下一页