C++ STL STRING的COPY-ON-WRITE技术
STL六大组件:
- 容器(Container), 存放数据
分配器(Allocators), “幕后英雄”, 为容器分配内存。allocator版本底层调用operator new, new调用malloc
- 迭代器(Iterators),操作数据
- 算法(Algorithms),操作数据的规则
- 适配器(Adapters), 比如deque,stack
- 仿函数(Functors)
1
2
3
4
5
6
7
8
9
int main () {
int ia[6] = {27, 210, 12,47,109,83};
vector<int, allocator<int>> vi(ia, ia+6);
cout << count_if(vi.begin(), vi.end(),
not1(bind2nd(less<int>(), 40)));
return 0;
}
容器:
- 顺序容器:
- array: size固定,不可扩充
- vector:size不固定,可向后扩充
- deque: size不固定,可向前,向后扩充
- list: size不固定,内存不连续
- 关联容器: map/unordered_map, set/unordered_set
OOP vs GP
- OOP: 将data和method关联在一起
- GP: 将data和method分开
GP:
- Container和Algorithm团队各自开发,通过iterator沟通即可。
- Algorithms通过iterator确定操作范围,然后取用Container元素。
介绍下STL(vector, map等,内存分配等角度)
主要是通过GP(Generic Programming)实现