在  ACM总结——STL标准模板库 一文中,我总结了STL的常见用法。

本文来讨论一下STL的设计哲学。

目录

​一,技术基础​

​1,函数重载​

​2,符号重载​

​3,模板​

​二,STL的核心内容​

​三,设计精髓​

​1,运算符最小集​

​2,大小顺序​

​3,存储顺序​

​四,STL是一把双刃剑​


一,技术基础

重载:函数重载、符号重载

泛型:模板函数、模板

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_boundupper_boundequal_range:   <   ++
copy:
  =   ++

next_permutationprev_permutation:   <    =    ++

2,大小顺序

无序数据集:==、非==

有序数据集:<推导出==> (严格弱序)

3,存储顺序

逻辑顺序:list

物理顺序:其他顺序容器

无顺序:关联容器

四,STL是一把双刃剑

STL需要功底才能用好,用不好反而弄巧成拙

1,尾部插入

2,二倍扩容

3,map查即存