基础知识点:
|STL是C++标准程序库的核心,深刻影响了标准程序库的整体结构;
|STL构成为可适应不同需求的集合类和在这些数据集合上操作的算法;
|STL内的所有组件有模板构成,其元素可以是任意类型;
|所有C++编译器和所有操作系统都支持STL;
|STL组件为容器、迭代器、算法三部分构成;
容器为管理某类对象的集合;
迭代器为在对象集合(容器)上进行遍历;
算法为处理集合内的元素;
|容器类别:
序列式容器:排列次序取决于插入时机和位置;
关联式容器:排列顺序取决于特定准则;
STL容器的共同操作:
{
|初始化:
产生一个空容器:
std::list
以另一个元素为初值完成初始化:
std::list
...
std::vector
以数组元素为初值完成初始化:
int array[]={2,4,6};
...
std::set
|与大小相关的操作:
size():返回当前容器的元素数;
empty():判断容器是否为空;
max_size():返回容器能容纳的最大元素数量;
|比较:
==、!=、<、<=、>、>=
比较操作两端的容器必须属于同一类型;
如果俩个容器内的所有元素按序相等,那么这俩个容器相等;
采用字典式顺序判断某个容器是否小于另一个容器;
|赋值和交换:
swap用于提高赋值交换操作效率;
|与迭代器相关的操作:
begin():返回一个迭代器,指向一个元素;
end():返回一个迭代器,指向最后一个元素之后;
rbegin():返回一个逆向迭代器,指向逆向遍历的第一个元素;
rend():返回一个逆向迭代器,指向逆向遍历的最后一个元素之后;
|元素操作:
insert(pos,e):将元素e的拷贝安插于迭代器pos所指的位置;
erase(beg,end):移除[beg,end]区间内的所有元素;
clear():移除所有元素;
}
迭代器:
{
|可遍历容器内全部或部分元素的对象;
|指出容器中的一个特定位置;
|迭代器的基本操作:
*:返回当前位置上的元素值,若该元素有成员,可通过迭代器以operator->取用;
++:将迭代器前进至下一元素;
==、!=:判断俩个迭代器是否指向同一位置;
=:为迭代器赋值;
|所有容器都提供获得迭代器的函数;
半开区间[beg,end)的好处:
1、为遍历元素时循环的结束时机提供了简单的判断依据(只要为达到end()循环就可以继续);
2、不必对空区间采取特殊处理;
|所有容器都提供俩种迭代器
container::iterator以“读写”元素遍历元素;
container::const_iterator以“只读模式”遍历元素;
|迭代器分类:
双向迭代器:
可以双向行进,以递增运算前进,或以递减运算后退,可以用==和!=比较;
list、set和map提供双向迭代器;
list
for(pos=l.begin();pos!=l.end();++pos
{..}
|随机存取迭代器
除了具备双向迭代器的所有属性还具备随机访问能力;
可以对迭代器增加或者减少一个偏移量,处理迭代器之间的距离;
vector、deque和string提供随机存取迭代器;
}
map/multimap
|构造拷贝析构:
map c:产生新的map;
map c1(c2):产生同类型的c1,并复制c2的所有元素;
map c(op):以op为排序准则产生一个新的map;
map c(beg,end):以区间[beg,end],内的元素产生一个map;
map c[beg,end,op]:以op为排序准则,以区间[beg,end]中的元素产生一个map;
~map():销毁所有元素并释放内存;
|map可以为以下形式:
map
map
|非变动操作:
c.size()返回元素的个数;
c.empty()判断容器是否为空;
c.max_size()返回元素最大可能数量;
c1==c2判断二者是否相等;
c1!=c2判断二者是否不相等;
c1
c1>c2判断是否大于;
c1<=c2;c1>=c2;同上;
|赋值
c1=c2;将c2的全部元素赋值给c1;
c1.swap(c2);c1、c2的元素互换;
swap(c1,c2);同上,全局函数;
|特殊搜索操作:
count(key);返回键值等于key的元素个数;
find(key);返回键值等于key的第一个元素,找不到的话返回end;
lower_bound(key)返回键值大于等于key的第一个元素;
upper_bound(key)返回键值大于key的第一个元素;
equal_range(key)返回键值等于key的元素区间;
map实例:
#include
#include
multimap实例:
#include
#include
学习心得:
STL具有高可重用性,高通用性,跨平台等优点,并且其内包含了些许多经典算法,适用于多种类型的数据,其为程序开发提供了许多宝贵的“零件”,方便了软件的开发,使得代码大大简化,功能强大并大幅度提升了效率,而不用耗费太多精力放在算法上,确实方便了编程操作。
其中迭代器将算法与容器联系起来,为容器中的元素分配储存空间,为算法执行期间产生的对象提供机制。
虽然上述部分,对于初学者而言 ,有些抽象,且难以理解,但相信通过丰富实践后,最后定能运用得行云流水,得心应手,对C++有更深刻地掌握。