知识点总结
STL中六大组件:
1)容器(Container),是一种数据结构,如list,vector,和deques ,以模板类的方法提供。为了访问容器中的数据,可以使用由容器类输出的迭代器;
2)迭代器(Iterator),提供了访问容器中对象的方法。例如,可以使用一对迭代器指定list或vector中的一定范围的对象。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器也可以是那些定义了operator*()以及其他类似于指针的操作符地方法的类对象;
3)算法(Algorithm),是用来操作容器中的数据的模板函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象,函数本身与他们操作的数据的结构和类型无关,因此他们可以在从简单数组到高度复杂容器的任何数据结构上使用;
4)仿函数(Functionobject)
5)迭代适配器(Adaptor)
6)空间配制器(allocator) 有一些是从网络上查的。
容器
容器类别
1,序列式容器:排列次序取决于插入时机和位置
例如:vector ,list ,queue,,,,
2,关联式容器:排列顺序取决于特定准则
例如:map ,set ,,,,
容器的共同能力
1,所有容器中存放的都是值而非引用。如果希望存放的不是副本,容器元素只能是指针。
2,所有元素都形成一个次序,可以按相同的次序一次或多次遍历每个元素。
容器元素的所有条件
1,必须能够通过拷贝构造函数进行复制,
2,必须可以通过赋值运算符完成赋值操作,
3,必须可以通过析构函数完成销毁动作,
4,序列式容器元素的默认构造函数必须可用
5,某些动作必须定义operator ==,例如搜寻操作
6,关联式容器必须定义出排序准则,默认情况是重载operator<
容器的共同操作
1,初始化,建立产生一个空容器
2,进行数据初始化
//或者,以另一个容器元素为初值完成初始化
//或者,以数组元素为初值完成初始化
迭代器
可遍历STL容器内全部或部分元素的对象,指出容器中的一个特定位置。
基本操作
l * :返回当前位置上的元素值,如果该元素有成员,可以通过迭代器operator->取用
l ++ :将迭代器前进至下一个元素
l == 和 != :判断两个迭代器是否指向同一个位置
l == :为迭代器赋值
l begin() :返回一个迭代器,指向第一个元素
l end():返回一个迭代器,指向最后一个元素之后
注:[begin,end)是半开区间的好处:
l 为遍历元素时循环的结构时机提供了简单的判断依据(只要未到end(),循环就可以继续)
l 不必对空区间采取特殊处理(空区间的begin(),就等于end())
迭代器的分类
1,双向迭代器:可以双向进行,以递增运算前进或以递减运算后退、可以用==和!=比较
list、set和map提供双向迭代器
2,随机存取迭代器
l 除了具备双向迭代器的所有属性,还具备随机访问能力
l 可以对迭代器增加或减少一个偏移量处理迭代器之间的距离,或者使用<>之类的关系运算符比较两个迭代器