1、STL与面向对象的区别
基本没有使用各种virtual函数,继承等,主要是用templates制作出来的
2、STL六大部件
分配器(allocator)、容器、迭代器、仿函数、算法、适配器
3、C++标准库和STL的关系
C++标准库>STL,STL包含的是六大部件,C++标准库还包含其他一些东西
4、STL六大部件之间的关系
-
容器:容器可以让我们不关注内存的管理,直接往里面添加元素,因此容器需要分配器的支持。 -
分配器:实现容器的内存管理。 -
算法:体现出与OOP的区别,和数据部分(容器)分离,面向对象的思想会将数据和函数放到类中包含。 -
迭代器:一种泛化的指针,实现对容器的查找等操作。 -
仿函数:函数功能,实现对象的加加减减等,概念性 -
适配器:可以对某些部件做一些转换,包括容器、仿函数、算法适配器 代码案例: 上图中包含了六大部件,可以初探到allocator的使用方法。
5、迭代器的前闭后开
针对所有的容器,其迭代器的begin()和end()含义均为前闭后开,即begin()指向第0个元素,end指向最后一个元素的下一个位置。
Container<T> c;
Container<T>::iterator iter = c.begin();
for (; iter != c.end(); ++iter)
上图中,c.end()指向的位置为容器中最后元素内存空间的下一个位置,非容器空间。*(c.begin())为解引用,*(c.end())无效,因为c.end()位置的内存不属于容器本身。
|