STL
1:STL由一些可适应不同需求的集合类(collection class),以及在这些数据集合上操作的算法(algorithm)构成
2:容器(Container) - 管理某类对象的集合
迭代器(Iterator) - 在对象集合上进行遍历
算法(Algorithm) - 处理集合内的元素
容器适配器(container adaptor)
函数对象(functor)
3:所有容器中存放的都是值而非引用。
所有元素都形成一个次序(order),可以按相同的次序一次或多次遍历每个元素。
4:STL容器元素的条件:
必须能够通过拷贝构造函数进行复制
必须可以通过赋值运算符完成赋值操作
必须可以通过析构函数完称销毁动作
序列式容器元素的默认构造函数必须可用
某些动作必须定义operator ==,例如搜寻操作
关联式容器必须定义出排序准则,默认情况是重载operator <
5:size()-返回当前容器的元素数量
empty()-判断容器是否为空
max_size()-返回容器能容纳的最大元素数量。
6:begin()-返回一个迭代器,指向第一个元素
end()-返回一个迭代器,指向最后一个元素之后
rbegin()-返回一个逆向迭代器,指向逆向遍历的第一个元素
rend()-返回一个逆向迭代器,指向逆向遍历的最后一个元素之后
7:insert(pos,e)-将元素e的拷贝安插于迭代器pos所指的位置
erase(beg,end)-移除[beg,end]区间内的所有元素
clear()-移除所有元素。
8:迭代器(iterator)(示例:iterator)
可遍历STL容器内全部或部分元素的对象
指出容器中的一个特定位置
9:begin() 返回一个迭代器,指向第一个元素
end() 返回一个迭代器,指向最后一个元素之后
10:迭代器(iterator):
双向迭代器:①:可以双向行进,以递增运算前进或以递减运算后退、可以用==和!=比较。
②:list、set和map提供双向迭代器
随机存取迭代器
①:除了具备双向迭代器的所有属性,还具备随机访问能力。
②:可以对迭代器增加或减少一个偏移量、处理迭代器之间的距离或者使用<和>之类的关系运算符比较两个迭代器。
③:vector、deque和string提供随机存取迭代器
11:赋值操作
c1 = c2 将c2的全部元素赋值给c1
c.assign(n,e) 将元素e的n个拷贝赋值给c
c.assign(beg,end) 将区间[beg,end]的元素赋值给c
c1.swap(c2) 将c1和c2元素互换
12:移除(remove)元素
c.pop_back() 移除最后一个元素但不返回最后一个元素
c.erase(pos) 删除pos位置的元素,返回下一个元素的位置
c.erase(beg,end) 删除区间[beg,end]内所有元素,返回下一个元素的位置
c.resize(num) 将元素数量改为num(增加的元素用defalut构造函数产生,多余的元素被删除)
13:map/multimap
使用平衡二叉树管理元素
元素包含两部分(key,value),key和value可以是任意类型
必须包含的头文件#include <map>
根据元素的key自动对元素排序,因此根据元素的key进行定位很快,但根据元素的value定位很慢
不能直接改变元素的key,可以通过operator []直接存取元素值
map中不允许key相同的元素,multimap允许key相同的元素。