1. STL 六大部件

STL的部件(Components)

  • 容器(Containers)
  • 分配器(Allocator)
  • 算法(Algorithms)
  • 迭代器(Iterators)
  • 适配器(Adapters)——进行转换
  • 仿函数(Functors)

这里是一个使用了全部6种STL部件的代码案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
int main()
{
int p[6] = { 27, 210, 12, 47, 109, 83 };
// 容器(container): vector
// 分配器(allocator): allocator<int>
vector<int, allocator<int>> vi(p, p + 6);
// 迭代器(iterator): vi.begin(), vi.end();
// 算法(algorithm): count_if (操作整个容器的头到尾)
// 适配器(adapter): not1: 相反的, bind2nd: 绑定第二个参数
// 仿函数(function): 比他小
cout << count_if(vi.begin(), vi.end(), not1(bind2nd(less<int>(), 40)));
// 计数:所有比40大的数
}

2. 迭代器(iterator)

1
2
3
4
5
6
7
// 获取一个迭代器
vector<int> vint;
vector<int>::iterator it = vint.begin();
// C++11
for(auto elem : vint) {
std::cout << elem << std::endl;
}

3. 容器分类(container)

3.1 队列容器

  • Array:事先分配元素个数的数组
  • Vector:可以在尾部进行数组容量的扩充
  • Deque:双端队列,可以在头部和尾部插入元素(pop_front、pop_back,push_front,push_back)
  • Queue:队列,可以在尾部排队,头部离开
  • List:双向链表
  • Forward-List:单项链表

3.2 关系容器

  • Set / Multiset:直接存储Value
  • Map / Multimap:存储Key/Value,通过Key查找Value
  • Unordered Set / Multiset:不进行排序
  • Unordered Map / Multimap:不进行排序
  • array<int, 100> myArray:声明一个长度为100的array数组

  • vector

    myVector:声明一个变量类型为int的vector数组

    • size() 当前元素个数
    • capacity() 容量
    • front() 第一个元素
    • back() 最后一个元素
    • data() 元素起始地址
  • list

    myList:声明一个变量类型为int的双向链表

    • size() 当前元素个数
    • max_size() 最大分配数量
    • front() 首元素
    • back() 为元素
  • deque

    myDeque:声明一个变量类型为int的双端队列(没有iterator,否则会破坏它的性质)

    • queue:只保留了先进先出
    • stack:只保留了后进先出
  • multiset

    myMultiSet:底层使用红黑树实现,插入完成排序

    • insert() 插入元素
    • size() 元素个数
    • max_size() 最大存储数量
    • find() 查找元素
  • multimap

    <int, string> myMulitMap:底层使用红黑树实现,插入完成排序

    • insert() 插入元素(自己完成组合 pair<int, string>)
  • unordered_multiset

    myUnMuSet:底层使用哈希表(开链法)

    • bucket_count() 篮子的数量(大于元素数量)
    • bucket_size(int n) 某个篮子内元素数量(可能为0)
    • load_factor() 载重因子
    • max_load_factor() 最大载重因子
  • unordered_multimap<int, string> myUnMuMap:底层使用哈希表(开链法)