C++ STL overview
C++模板库是标准库的核心。
将数据和程序分离,同样的算法操作不同类型的数据,不同类型的数据有相同类型的算法。迭代器访问数据,每种容器都有其特定的迭代器。使用模板编程,不需要为每种容器都实现一套算法,同时也让用户易于理解。
一个例子
using namespace std;// 标准库中的函数都定义在std 命名空间
vector<int>vec;//vector 是分配在堆上的可动态增长的array
vec.push_back(1);//push_back 是vector 的成员函数,将元素放在结尾
vector<int>::iterator it1 = vec.begin();//vector 所对应的迭代器
vector<int>::iterator it2 = vec.end();//begin() end() 是vector 的成员函数 分别返回指向该vector的一个元素 和最后一个元素的下一个元素的iterator
for(vector<int>::iterator it = it1;it1!=it2;it1++)//使用for循环搭配迭代器 可以访问vector中的每个元素
{
cout<<*it<<endl;//迭代器就是像是指针,我们可以对其进行++ -- 解引用
}
容器是半闭区间[),如下图:
如果尝试: *vec.end(); 行为是未定义的。
sort(iter1,iter2); // 对iter1-iter2 之间的元素进行排序 算法作用于iterator 而不是直接作用于容器。
使用STL的理由:
1 代码重用,不需要重复造*
2 有效性。大多数编译器都对标准库代码进行了优化。
3 标准库的代码准确,bug少。
4 总是可用的
5 为创建自己的库提供了示范