C++ STL partI

1.基础概念

STL 标准模板库 | 泛型编程思想

参考:

2.六大部件

  • 容器 Containers
  • 分配器 Allocators
  • 算法 Algorithms
  • 迭代器 Iterators
  • 适配器 Adapters
  • 仿函数 Functors

结构图如下:

六大部件关系图

示范代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>
using namespace std;

int main()
{
int ia[6] = {1, 2, 3, 4, 5, 6};
vector<int, allocator<int>> vi(ia, ia + 6);

cout << count_if(vi.begin(), vi.end(),
not1(bind2nd(less<int>(), 3))) << endl;

return 0;
}

容器遍历:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for (auto i = vec.begin(); i != vec.end(); i++)
{
cout << *i << endl;
}

for (int i : {1, 3, 5, 7, 9, 13})
{
cout << i << endl;
}

for (auto elem : vec)
{
cout << elem << endl;
}

for (auto& elem : vec)
{
elem++;
}

3.各种容器

3.1 顺序容器

名字 实现 特点
vector 顺序存储 可变长数组,仅支持尾插
stack 顺序存储 栈,先进后出,仅一端压入弹出
deque 顺序存储 队列,先进先出,双端压入弹出
list 链式存储 双向链表,双端插入移除
forward_list 链式存储 单向链表,头部插入移除

3.2 关联容器

名字 实现 用法 特点
unordered_set hash_table unordered_set us; 不支持重复,查询速度快
unprdered_map hash_table unprdered_map<key, value> um; 不支持重复,查询速度快
unordered_multiset hash_table unordered_multiset ums; 支持重复,查询速度快
unprdered_multimap hash_table unprdered_multimap<key, value> umm; 支持重复,查询速度快
set rb_tree set s; 不支持重复,有序,节省空间
map rb_tree map<key, value> m; 不支持重复,有序,节省空间
multiset rb_tree multiset ms; 支持重复,有序,节省空间
multimap rb_tree multimap<key, value> mm; 支持重复,有序,节省空间

注:hash_table实现的容器需要重载 == 运算符,而rb_tree实现的容器需要重载 < 运算符。


C++ STL partI
http://helloymf.github.io/2022/10/03/c-stl-parti/
作者
JNZ
许可协议