可以说是为了追求可复用性,产生了STL。
STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。
它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具
革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程
序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。这种现象有些类似于Microsoft
Visual C++中的MFC(Microsoft Foundation Class Library),或者是Borland C++ Builder中的
VCL(Visual Component Library)。
STL和C++标准函数库
下面看一段STL编写的输入-排序-输出代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void main(void)
{
vector<int> num; // STL中的vector容器
int element;
// 从标准输入设备读入整数,
// 直到输入的是非整型数据为止
while (cin >> element)
num.push_back(element);
// STL中的排序算法
sort(num.begin(), num.end());
// 将排序结果输出到标准输出设备
容器(container):
…
//容器一词听上去很高深,其实说白了也是类似于对象的东西,但又和对象有点区别。
迭代器(iterator): 指针
//这个名词就更玄了,其实就是类似于指针的东西。
内部实现: 数组 // 就是没有固定大小的数组,vector直接翻译是向量的意思
vector
// T 就是数据类型,Alloc是关于内存的一个什么东西,RoBa没有仔细讲,一般是使用默认参数。
支持操作:
begin(), //取首个元素,返回一个iterator
end(), //取末尾(最后一个元素的下一个存储空间的地址)
size(), //就是数组大小的意思
clear(), //清空
empty(), //判断vector是否为空
[ ] //很神奇的东东,可以和数组一样操作
//举例: vector a; //定义了一个vector
//然后我们就可以用a[i]来直接访问a中的第i + 1个元素!和数组的下标一模一样!
push_back(), pop_back() //从末尾插入或弹出
insert() O(N) //插入元素,O(n)的复杂度
erase() O(N) //删除某个元素,O(n)的复杂度
可以用于数组大小不定且空间紧张的情况