1 认识headers、版本、重要资源
STL(Standard TemplateLibrary)分为6个部分,不同于C标准库(知识独立的函数),彼此之间有很紧密的关联。
泛型编程:以模板为主要功能进行编程。
几种LEVEL:
0 | 使用标准库 |
1 | 认识标准库 |
2 | 良好使用标准库 |
3 | 扩充标准库 |
标准库大于STL。
“using namespace std;”将std命名空间全部打开;
“using std::cout”只使用std中的cout一个部分功能。
常用资料来源:
https://gcc.gnu.org/onlinedocs/
2 STL体系结构基础介绍
3 容器之分类与各种测试(一)
4 容器之分类与各种测试(二)
5 容器之分类与各种测试(三)
6 容器之分类与各种测试(四)
STL6大部件:
容器 Containers |
分配器 Allocators |
算法 Algorithms |
迭代器 Iterators |
适配器 Adapters |
仿函数 Functors |
容器中对内存的操作需要分配器的支持。
迭代器:好似一种泛化的指针。
多种部件一起使用示例代码:
容器:前闭后开区间
vector.begin指向首部,vector.end指向尾部最后一个元素的下一个位置。
所以*(vector.begin())能够访问到数据,而*(vector.end())可能会引起段错误。
容器不一定是连续空间。
C++11循环的新语法:
for( decl : coll){
statement;
}
在十分了解自己程序的前提下也要适当使用auto类型。
容器分为两个种类:
序列式:
array:起点固定,尾部固定。
vector:起点固定,尾部可以扩充,分配器实现扩充功能。
deque:起点和尾部都可以扩充。
list:双向链表(两个指针)。
forward_list:单向链表(一个指针)。
关联式:元素是用key来找value,适合快速查找。Multi型表示key可以重复。
Set/Multiset:二分树,实质用的红黑树(左右元素平衡,方便查找),key就是value,value就是key。
Map/Multimap:比Set多一个key。
标准库中:qsort排序算法,bsearch查找算法(排序后使用),sequence search查找算法(乱序时使用,非常慢)。find查找元素,返回值是iterator。
序列式容器 | |
array | array<type, size> a;连续排列,固定大小,不能扩充。 |
vector | vector<type> v;连续排列,元素可向后扩充。 |
list | list<type> l;非连续排列,类似链表,元素可前后扩充。 |
forward_list | forward_list<type> f; 非连续排列,类似链表,元素可向后扩充 |
slist | __gnu_cxx::slist<type> s;非标准库的单向链表,头文件<ext\slist>,用法和forward_list相同。 |
deque | deque<type> d;连续排列,元素可前后扩充,deque看似是连续的,但是元素其实是分段存储的,由N个buffer组成。 |
关联式容器 | |
multiset | multiset<type> m;树形结构存储,没有push_back,只有insert功能用来插入元素。 |
multimap | multimap<key, value> m; |
unordered_multiset | unordered_multiset<type> u;篮子一定比元素多。 |
unordered_multimap | unordered_multimap<key, value> m; |
set | set<type> s;元素不能重复(key就是value,value就是key)。 |
map | map<key, value> m; key不能重复,value可以。 |
unordered_set |
|
unordered_map |
|
7 分配器之测试
GNU带的扩展的分配器,非标准库 include <ext/xxx_allocator.h> | |
1 | __gnu_css::malloc_allocator<type> |
2 | __gnu_css:: new_allocator <type> |
3 | __gnu_css:: __pool_allocator <type> |
4 | __gnu_css:: debug_allocator <type> |
5 | __gnu_css:: mt_allocator <type> |
6 | __gnu_css:: bitmap_allocator <type> |
7 | __gnu_css:: array_allocator <type> |