STL源码剖析 -- 读书笔记
来源:互联网 发布:富爸爸买卖贵金属 知乎 编辑:程序博客网 时间:2024/05/23 01:10
1. ptrdiff_t、difference_type,头尾之间的距离。
2. 空间配置器(allocator)定义于<memory>中
3. 迭代器(iterator)最总要的作用就是对operator* 和 operator->进行重载(overloading)工作。
4. auto_ptr:用来包装原生指针(native pointer)的对象,内存漏洞(memory leak)问题可藉此获得解决。
5. Partial Specialization (偏特化) :如果 class template 拥有一个以上的 template 参数,我们可以针对其中某个(或数个,但非全部)template 参数进行特化工作。换句话说,我们可以在泛化设计中提供一个特化版本(也就是将泛化版本中的某些 template 参数赋予明确的指定)。
6.容器(内缩方式来表示基层与衍生层的关系,这里的衍生,不是派生(inheritance)关系,而是内含(containment)关系。例如:heap内含一个vector,priority-queue内含一个heap、stack和queue都内含一个deque,set/map/multiset/multimap 都内含一个RB_tree,hash_x 都内含一个hashtable。)
序列式容器(Sequence Containers):
array(build-in) C++内建
vector
<1> vector中增加新元素时,如果超过了当时的容量,则容量会扩充至两倍。如果容量仍不足,就扩张至足够大的容量。
<2> 对vector的任何操作,一旦引起空间重新配置,指向元vector的所有的迭代器就都失效了。
<3> 关于erase,erase有两种
erase(iterator position) 删除位置为position的元素。
erase(iterator __first, iterator __last)的删除区间为[__first, __last)。
<4> 关于insert,insert有三种
插入完成后,新节点将位于哨兵迭代器(__position)所指节点的前方——这是STL对于“插入操作”的标准规范。
insert(iterator __position, const value_type& __x) :在__position之前插入x
insert(iterator __position, size_type __n, const value_type& __x):在__position之前插入n个x
insert(iterator __position, _InputIterator __first, _InputIterator __last):在__position之前插入[__first, __last)的元素
heap:以算法形式呈现(xxx_heap)
<1> STL提供的heap操作,只有make_heap(), pop_heap(), sort_heap()三个操作
1、 关于make_heap(), 有两个版本
make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last);
make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp);
2、 关于push_heap(), 也有两个版本,push_heap中[__first, last - 1)中的元素为一个合法堆,last - 1 处元素相当于入堆得元素。
push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp)
3、 关于pop_heap(), 也有两个版本,pop_heap之后,出堆的元素在__last-1位置
pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp)
<2> 关于heap应当的改进,希望能够加入修改堆中元素值的功能。可以命名为update();
priority-queue
<1> priority_queue 用 heap 实现的 vector序列。
<2> priority_queue 不提供迭代器。
list
slist:非标准
deque
stack:配置器
<1> stack 往往不被归类为 container(容器),而被归类为 container adapter。
queue:配置器
关联式容器(Associative Containers):
RB-tree:非公开
set
map
multiset
multimap
hashtable:非标准
参照hash_map中的写法应该这样定义
hashtable<pair<const key_type, value_type>,
key_type,
hash<key_type>,
_Select1st<pair<const key_type,value_type> >,
equal_to<key_type>,
allocator<value_type>
> ht(50, hash<key_type>(), equal_to<key_type>());
hash_set:非标准
hash_map:非标准
hash_multiset:非标准
hash_multimap:非标准
7. 算法(Algorithms)
8. 配接器(Adapter)
2. 空间配置器(allocator)定义于<memory>中
3. 迭代器(iterator)最总要的作用就是对operator* 和 operator->进行重载(overloading)工作。
4. auto_ptr:用来包装原生指针(native pointer)的对象,内存漏洞(memory leak)问题可藉此获得解决。
5. Partial Specialization (偏特化) :如果 class template 拥有一个以上的 template 参数,我们可以针对其中某个(或数个,但非全部)template 参数进行特化工作。换句话说,我们可以在泛化设计中提供一个特化版本(也就是将泛化版本中的某些 template 参数赋予明确的指定)。
6.容器(内缩方式来表示基层与衍生层的关系,这里的衍生,不是派生(inheritance)关系,而是内含(containment)关系。例如:heap内含一个vector,priority-queue内含一个heap、stack和queue都内含一个deque,set/map/multiset/multimap 都内含一个RB_tree,hash_x 都内含一个hashtable。)
序列式容器(Sequence Containers):
array(build-in) C++内建
vector
<1> vector中增加新元素时,如果超过了当时的容量,则容量会扩充至两倍。如果容量仍不足,就扩张至足够大的容量。
<2> 对vector的任何操作,一旦引起空间重新配置,指向元vector的所有的迭代器就都失效了。
<3> 关于erase,erase有两种
erase(iterator position) 删除位置为position的元素。
erase(iterator __first, iterator __last)的删除区间为[__first, __last)。
<4> 关于insert,insert有三种
插入完成后,新节点将位于哨兵迭代器(__position)所指节点的前方——这是STL对于“插入操作”的标准规范。
insert(iterator __position, const value_type& __x) :在__position之前插入x
insert(iterator __position, size_type __n, const value_type& __x):在__position之前插入n个x
insert(iterator __position, _InputIterator __first, _InputIterator __last):在__position之前插入[__first, __last)的元素
heap:以算法形式呈现(xxx_heap)
<1> STL提供的heap操作,只有make_heap(), pop_heap(), sort_heap()三个操作
1、 关于make_heap(), 有两个版本
make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last);
make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp);
2、 关于push_heap(), 也有两个版本,push_heap中[__first, last - 1)中的元素为一个合法堆,last - 1 处元素相当于入堆得元素。
push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp)
3、 关于pop_heap(), 也有两个版本,pop_heap之后,出堆的元素在__last-1位置
pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp)
<2> 关于heap应当的改进,希望能够加入修改堆中元素值的功能。可以命名为update();
priority-queue
<1> priority_queue 用 heap 实现的 vector序列。
<2> priority_queue 不提供迭代器。
list
slist:非标准
deque
stack:配置器
<1> stack 往往不被归类为 container(容器),而被归类为 container adapter。
queue:配置器
关联式容器(Associative Containers):
RB-tree:非公开
set
map
multiset
multimap
hashtable:非标准
参照hash_map中的写法应该这样定义
hashtable<pair<const key_type, value_type>,
key_type,
hash<key_type>,
_Select1st<pair<const key_type,value_type> >,
equal_to<key_type>,
allocator<value_type>
> ht(50, hash<key_type>(), equal_to<key_type>());
hash_set:非标准
hash_map:非标准
hash_multiset:非标准
hash_multimap:非标准
7. 算法(Algorithms)
8. 配接器(Adapter)
- STL源码剖析 -- 读书笔记
- STL源码剖析读书笔记
- STL源码剖析读书笔记
- [读书笔记]《STL源码剖析》
- STL 源码剖析 读书笔记 第一章
- STL源码剖析读书笔记2
- STL源码剖析读书笔记3
- STL源码剖析读书笔记4
- STL源码剖析读书笔记5
- STL源码剖析读书笔记6
- STL源码剖析读书笔记7
- STL源码剖析读书笔记7
- STL源码剖析读书笔记之vector
- stl源码剖析读书笔记之allocator
- STL 内存配置器 《STL源码剖析》 读书笔记
- STL---map,multimap概述---STL源码剖析读书笔记
- STL空间配置器--《STL源码剖析》读书笔记
- 【STL源码剖析读书笔记】STL容器迭代器失效问题总结
- C++primer(第4版)书评
- android 开发
- 在ASP.NET MVC中使用DropDownList
- uva 657 - The die is cast
- 如何使用Android 调用update?
- STL源码剖析 -- 读书笔记
- PROCESSENTRY32 结构
- 解决sqlplus下方向键的问题
- objective-C不支持16进制的颜色表示,需要转换成rgb表示法
- 水晶报表好的博客园
- Websharp 个人记录
- VS 2012 C++程序将支持Windows XP (这篇文章害我浪费了一整天的时间查问题)
- chrome下img加载对height()的影响
- 套接字选项setsockopt()