STL诞生
- 长久以来,软件界一直希望建立一种可重复利用的东西
- C++面向对象和泛型编程思想,目的就是复用性的提升
- 大多数情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作
- 为了建立数据结构和算法的一套标准,在保证效率的前提下,将算法从诸多具体应用之中抽象出来,诞生了STL
STL内容
STL主要包含了容器、算法和迭代器三大部分。
名称 | 内容 | 理解 | 实现方式 |
---|---|---|---|
容器 | 包含绝大数多数数据结构,如数组、链表、队列、堆、栈和树等。开发者可直接应用相关函数。 | 是一种数据结构 | 类模板 |
迭代器 | 类似指针,通过它的有序移动把容器中的元素与算法关联起来,它是实现所有STL功能的基础所在。 | 初学,可先理解为指针 | 封装了指针的类对象 |
算法 | 包含了诸如增、删、改、查和排序等系统函数,开发者可以直接操作这些函数实现相应功能。 | 函数模板 |
STL特点
STL中的迭代器即指针,可以是所需要的任意类型,它最大的好处是可以使容器和算法分离。
图示:
命名空间
概述
STL程序中一般需要加using namespace std;
,这属于命名空间的应用,关键字是namespace
。
原理
在C++中,名称可以是变量、函数、结构、枚举以及类和结构的成员。随着工程的增大,名称互相冲突的可能性也将增加。使用多个厂商的类库时,可能导致名称冲突,故C++提出了namespace
命名空间的解决方法,只要再加2一层封装就可以了。
举例
例如两个库可能都定义了名为func()
的函数,但定义的方式不兼容,那么应用中如何应用某一个具体的func()
函数呢?我们使用命名空间:
# include <stdio.h>
namespace mycompany{
void func(){
printf("Hello,this is my company");
}
};
namespace yourcompany
{
void func(){
printf("Hello,this is your company");
}
};
using namespace mycompany;
int main(int argc,char* argv[]){
func();
printf("\n");
yourcompany::func();
printf("\n");
return 0;
}
由于STL的命名空间名称是std,因此要应用STL,必须要包含using namespace std;
。
参考书籍:《C++ STL基础及其应用(第2版)》