------------恢复内容开始------------
P2
1.container 需要有allocator帮助分配内存,即每种container都得搭配一个allocator
2. container.begin() 表示容器第一个元素的起始地址(指向第一个元素)
container.end() 表示最后一个元素之后下一个元素的起始位置【*(container.end()) = 垃圾内存】
综上iterator 本身类似一个指针(可能本质就是指针实现的) 可以(*,->,++,--)
iterator本身是一个smart pointer【pointer like class】
P3
1. Vector 只有一端可扩充,pushback()静态数组实现,每次是两倍扩展(2,4,8,16.....)
3. Associative containers: set(key)/multiset. (key:value)map/multimap 底部都是红黑树实现
4. multi-表示key值是否可重复
unordered container(hashtable实现) 一般是链式冲突解决法
P5 <List> C++ 的list是双向链表且是环状的实现。单向链表是forward—list
1. 全局sort VS 容器自带sort
2. 提供 push_back & push_front
<forward-list>:
3. only push_front //Prepends the given element value
to the beginning of the container.
4. slist(GNU 独有) ===== forward-list
<deque双端队列> 分段连续,段间离散,段内连续(有次序)
deque-->可以重构成 stack & queue【更像是deque的adapter】
因为deque有 push_front[back] 以及 pop_front[back]顾可以提供stack与queue 的所有操作。
P 10 Allocator
::operator new , ::Operator delete最终都是C的malloc和free来分配内存
GNU2.9 alloc类:存在一个数组[0]->[15] [0]每个元素8个字节,[1]每个元素占16...8的倍数递增下去,导致每次为多个元素分配空间时,头部的cookie个数减少。
GNU4.9 allocator类
P 11 容器之间的关系
array,vector--->都是连续的空间(静态数组实现)。 priority_queue 中composite 一个heap 而heap则composite 一个 vector(基础都是vector)
set,map,multiset,multimap -> 中含有rb_tree 为复合关系 。 hash_set, hash_map ==unordered_set , unordered_map
deque(分段连续空间) stack,queue中都含有一个双端队列.
一般容器的iterator都需要 重载++ -- * -> 这4个操作符重载
postfix form = i++(后置)先用再移动
prefix form = ++i (前置)先移动再用
P13 list(本质是一个前闭后开双向链表,之所以要成环状,是为了begin()和end()判断空和满逻辑要不同)
begin指向当前表头,end指向尾部元素的下一个
iterator萃取器【iterator_traits】:用于返回该容器的一系列属性:iterator_category(指针的移动性质指针向前与向后),difference_type(当需要知道两iterator之间的距离时该用哪种数据类型表示 一般unsigned int),value_type(容器的元素类型),reference,pointer。
所以iterator就需要5种associated types! 但前提只有struct(iterator) 和 class这种能够提供typedef的才可以通过classname直接萃取回答。
如果对象是一个native pointer的话
函数指针 (与数组类似函数的名字就是指向该函数的指针)
函数指针的定义方式
data_types (*func_pointer)( data_types arg1, data_types arg2, ...,data_types argn);
例如:
1.int (*fp)(int a); // 这里就定义了一个指向函数(这个函数参数仅仅为一个 int 类型,函数返回值是 int 类型)的指针 fp。
2.int RecallFunc(int *start, int *end, bool (*pf)(int)) // 定义指向函数(返回值 为bool型,参数只有一个为int)的指针pf.
------------恢复内容结束------------