STL编程

STL即标准模板库,是指设计好的一系列对通用数据结构进行类模板和函数模板

在标准类模板库中,所有提供数据常用处理功能的函数模板成为算法

在标准模板库中,所有描述数据结构的类模板称为容器类,容器就是用来存放不同类型数据的数据结构,容器也经常指容器类。

标准模板库STL中对容器的使用设计以下几个方面:

(1)容器:保存数据的类模板的实列对象

(2)迭代器:容器中元素的指针

(3)适配器:容器类派生出的有其他数据结构特点的类模板的实列对象。

(4)算法:作用于容器上的处理函数的函数模板。


STL容器与迭代器

容器是用于保存数据且存取数据方便,高效的对象。容器分为顺序容器和关联容器

(1)顺序容器:容器中的数据有先后顺序。顺序容器有vector,list,deque

(2)关联容器:容器中的数据没有先后顺序。关联容器有set,map等2

顺序容器的特点:

vector  内部用连续的存储空间实现,可以快速存取,但插入、删除比较慢(都需要移动元素);

list        内部用双向链表实现,可快速插入和删除(只需要修改指针),但是存取速度较慢(从头遍历)。

deque  内部分块链接,局部是数组,存取,插入和删除介于vector和list之间;

迭代器:容器中类似与元素指针的量来操作容器元素,迭代器有正向迭代器也有逆向迭代器

获取头尾迭代器的操作:

c.begin()//指向容器c的头元素的迭代器值

c.end()  //指向容器c的末尾元素最后一位置的迭代器值

c.rbegin()//指向容器c的末尾元素的迭代器值

c.rend()  //指向容器c的头元素前一个位置迭代器值

迭代器p可以使用p++,++p,p--,--p,p+3,p-2,p+=3,p-=2

顺序的容器的常用操作:

操作                         
                   作用                              可操作容器
c.push_back(x) 将x添加到容器末尾 全部
c.push_front(x) 将x添加到容器头 list,deque
c.insert(p,x) 将x插入迭代器p之前 全部,禁用逆向迭代器
c.erase(p) 删除迭代器p指向的元素 全部,禁用逆向迭代器
c.erase(b,e) 删除迭代器b到e之间的元素 全部,禁用逆向迭代器
c.clear() 删除容器所有元素 全部
c.pop_back() 删除容器末尾的元素 全部
c.pop_front() 删除容器的头元素的引用 list,deque
c.back() 返回容器末尾元素的引用 全部
c.front() 返回容器头元素的引用 全部
c[n] 返回下标n号元素的个数 vector,deque
c.size() 返回容器元素的个数 全部
c.max_size() 返回容器最大可能容量 全部
顺序容器可以派生出其他类型的数据结构,如栈结构,这种派生出来的新类型是在原有容器基础上扩展或者限制操作而来的,称为容器适配器。容器适配器有deque(队列),priority_queue(优先级队列)和stack(栈)

关联容器:

联容器有map(映射),set(集合),multimap(多重映射),multiset(多重集合)

STL算法:

STL中的算法是指常用的作用于各类容器数据的函数模板,算法通过迭代器对容器中的数据进行操作。

find(b,e,x)  在迭代器b,e之间的元素中查找X,若查找成功返回迭代器,若失败返回e  
fill(b,e,x)   将迭代器b到e之间值替换为x  
replace(b,e,x,y)将迭代器b,e之间的x替换为y  
sort(b,e)将迭代器之间的元素按照升序排序  
sort(b,e,f)将迭代器b,到e之间的元素按照函数对象f定义的次序排列  
for_each(b,e,f)遍历迭代器b到e之间的元素,按照f定义的操作处理  
   

猜你喜欢

转载自blog.csdn.net/lxn18392641463/article/details/78918400
STL