在 ACM总结——STL标准模板库 一文中,我总结了STL的常见用法。
本文来讨论一下STL的设计哲学。
目录
一,技术基础
1,函数重载
2,符号重载
3,模板
三,设计精髓
2,大小顺序
3,存储顺序
一,技术基础
重载:函数重载、符号重载
泛型:模板函数、模板类
1,函数重载
如sort两参、三参
vector<TYPE> vt;
sort(vt.begin(),vt.end());
sort(vt.begin(),vt.end(),less<TYPE>());
两参会自动填充第三参为<
2,符号重载
(1)[]
map<double,double>m;
m[-2.5]=1;
(2) <
设计精髓:所需的大小关系都由(重载)<推导出来
使用限制:重载<必须满足严格弱序,不能重载成<=
(3)++
设计精髓:保持逻辑存储的一致性
3,模板
二,STL的核心内容
容器:顺序容器、关联容器、容器适配器
迭代器:和指针类似,依赖于++
泛型算法
三,设计精髓
1,运算符最小集
最小集:++、<、==、=
运算符作为统一的接口,所有算法都依赖这几个接口
sort: < ++
find: == ++
lower_bound、upper_bound、equal_range: < ++
copy: = ++
next_permutation、prev_permutation: < = ++
2,大小顺序
无序数据集:==、非==
有序数据集:<推导出==和> (严格弱序)
3,存储顺序
逻辑顺序:list
物理顺序:其他顺序容器
无顺序:关联容器
四,STL是一把双刃剑
STL需要功底才能用好,用不好反而弄巧成拙
1,尾部插入
2,二倍扩容
3,map查即存