STL 讲义
讲座内容
•
STL 简要介绍
•
STL 之 vector
•
STL 之 list
•
STL 之 map
STL 特点
•
STL 的一个重要特点是数据结构和算法的分离。尽管这是
个简单的概念,但这种分离确实使得 STL 变得非常通用。
例如,由于 STL 的 sort() 函数是完全通用的,你可以用它
来操作几乎任何数据集合,包括链表,容器和数组。
•
STL 另一个重要特性是它不是面向对象的。为了具有足够
通用性, STL 主要依赖于模板而不是封装,继承和虚函数
(多态性)—— OOP 的三个要素。你在 STL 中找不到任
何明显的类继承关系。这好像是一种倒退,但这正好是使
得 STL 的组件具有广泛通用性的底层特征。另外,由于 ST
L 是基于模板,内联函数的使用使得生成的代码短小高效。
•
在 C++ 标准中, STL 被组织为下面的 13 个头文件: <algo
rithm> 、 <deque> 、 <functional> 、 <iterator> 、 <vector
> 、 <list> 、 <map> 、 <memory> 、 <numeric> 、 <queu
e> 、 <set> 、 <stack> 和 <utility> 。
传统的 sort 函数
•
#include <iostream>
•
using namespace std;
•
void sort(int a[],int n)
•
{
•
for (int i=1;i<n;i++)
•
{
•
int j=i-1;
•
int k=a[i];
•
while (j>=0 && a[j]>k) // 升序排序用 > 降序排序用 <
•
{
•
a[j+1]=a[j];
•
j--;
•
}
•
a[j+1]=k;
•
}
•
}
•
void pt(int a[],int n) // 此例子的缺点是什么 ? 对于不同的数据类型 , 是不是还要写出不同的函数 ?
•
{
•
for (int i=0;i<n;i++)
•
{
•
cout<<a[i]<<'\t';
•
}
•
cout<<endl;
•
}
•
int main()
•
{
•
int a[]={12,3,1,45,63,13,16};
•
pt(a,sizeof(a)/sizeof(a[0]));
•
sort(a,sizeof(a)/sizeof(a[0]));
•
pt(a,sizeof(a)/sizeof(a[0]));
•
return 0;
•
}