博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL--双端队列(deque)和链表(list)
阅读量:6891 次
发布时间:2019-06-27

本文共 2512 字,大约阅读时间需要 8 分钟。

双端队列(deque容器类):

#include<deque>与vector 类似,支持随机访问和快速插入删除,它在容器中某一位置上的操作所花费的是线性时间。
与vector不同的是:deque 还支持从开始端插入数据:push_front() 。
此外deque 不支持与vector 的capacity() 、reserve() 类似的操作。
deque,是“double-ended queue”的缩写。可以随机存取元素(用索引直接存取)。
数组头部和尾部添加或移除元素都非常快速,但是在中部安插元素比较费时。
本文地址:
,转载请注明源地址。
头文件  #include <deque>
定义变量  deque<int> mydeq;
主要成员函数
mydeq.clear()  移除容器中所有数据。
mydeq.push_front(elem)  在队列首部加入一个数据
mydeq.pop_front()  删除队列尾部数据
mydeq.push_back(elem)  在队列尾部加入一个数据
mydeq.pop_back()  删除队列尾部数据
mydeq.empty()  判断队列是否为空,为空返回true
mydeq.size()          返回容器中实际数据的个数。
mydeq.erase(pos)       删除pos位置的数据,返回下一个数据的位置。
mydeq.insert(pos,cnt,elem)  在pos位置插入cnt个数据elem。
mydeq.begin()     返回的指针指向数组中的第一个数据。
mydeq.end()        实际上是取末尾加一,以便让循环正确运行--它返回的指针指向最靠近数组界限的数据。
operator[]                返回容器中指定位置的一个引用
 
deque举例:
#include 
#include
using namespace std; typedef deque
INTDEQUE;// 从前向后显示deque 队列的全部元素 void put_deque(INTDEQUE deque, char *name) { INTDEQUE::iterator pdeque;// 仍然使用迭代器输出 cout << "The contents of " << name << " : "; for(pdeque = deque.begin(); pdeque != deque.end(); pdeque++) cout << *pdeque << " ";// 注意有 "*" 号哦,没有"*" 号的话会报错 cout<

 链表(list容器类):

#include<list>,是一种双线性列表,只能顺序访问(从前向后或者从后向前)。
list 的数据组织形式
 
与前面两种容器类有一个明显的区别就是:它不支持随机访问。要访问表中某个下标处的项需要从表头或表尾处(接近该下标的一端)开始循环。而且缺少下标运算符:
operator[] 。
在任何位置上执行插入或删除动作都非常迅速,内部只需调整一下指针。
 <list> 内部实现: 双向链表
list<T, Alloc>
支持操作:
begin(), end(), size(), clear(), empty()
push_back(), pop_back()
push_front(), pop_front()
insert()  O(1)
erase()  O(1)
sort()  O(nlogn),不同于<algorithm>中的sort
list仍然包含了erase(),begin(),end(),insert(),push_back(),push_front()这些基本函数,下面我们来演示一下list的其他函数功能。
merge():合并两个排序列表;
sort():列表的排序;
list举例:
#include 
#include
#include
using namespace std;void PrintIt(list
n) { for (list
::iterator iter = n.begin(); iter != n.end(); ++iter) cout << *iter << " ";//用迭代器进行输出循环}int main(void) { list
listn1, listn2; //给listn1,listn2初始化 listn1.push_back(123); listn1.push_back(0); listn1.push_back(34); listn1.push_back(1123); //now listn1:123,0,34,1123 listn2.push_back(100); listn2.push_back(12); //now listn2:12,100 listn1.sort(); listn2.sort(); //给listn1和listn2排序 //now listn1: 0,34,123,1123 listn2: 12,100 PrintIt(listn1); cout << endl; PrintIt(listn2); listn1.merge(listn2); //合并两个排序列表后,listn1: 0,12,34,100,123,1123 cout << endl; PrintIt(listn1); cin.get();}
你可能感兴趣的文章
深入理解mysql
查看>>
Centos 6.4下搭建pptp!
查看>>
杂谈MVVM在Silverlight中应用
查看>>
FreeNAS如何配置LACP(链路聚合和故障)
查看>>
第4章 最简单的C程序设计——顺序程序设计
查看>>
Mysql面试题精选
查看>>
用sersync进行实时同步数据
查看>>
Exchange 2010 OAB无法更新
查看>>
Linux iftop 流量监控工具
查看>>
简单的python程序实现99乘法口诀表
查看>>
Cocos2d-x游戏实例-《跑跑跑》制作教程(第四篇)——地图卷动
查看>>
【PPT技巧】让PPT背景音乐仅在播放视频时暂停
查看>>
Ubuntu14.04安装分布式存储sheepdog+zookeeper
查看>>
innodb引擎
查看>>
pandas.to_numeric转化数据为数字型
查看>>
在企业环境下实现禁止使用USB的高安全措施
查看>>
乐在其中设计模式(C#) - 单例模式(Singleton Pattern)
查看>>
SVN提示文件被锁住以及Unlocker软件的使用
查看>>
MySQL Study案例之--MySQL体系和存储引擎
查看>>
php注入之完全版
查看>>