deque & list
deque
双向队列 它也是采用动态数组的方式来管理的提供了随机数组
和vector的区别
1.deque头尾两端可以开放,能够进行快速的插入和删除(vector只能在尾部进行快速的插入和删除)
2.deque的内部结构和vector相比较vector会多一个间接的过程,元素的存取相比较vector而言要慢一点
3.迭代器需要在不同的区域进行跳转,所以迭代器必须是一个只能指针
4.在对内存区有限制的系统当中,deque可以内涵更多的元素
5.deque不支持容量和内存重分配时机的控制
6.deque的内存块不再被使用的时候可以被释放
deque的操作几项和vector不同
不提供容量的操作capcity reserve
提供了push_front,pop_front头删头插
相似
1.在中部插入和删除元素速度相对慢
2.迭代器和vector相似,随机存取迭代器
在生活中用到的更多是vector
如果需要在头尾进行快速的插入和删除会选择deque
list
双向链表
list和vector的区别
1.不支持随机存取,如果要存第八个元素,必须先遍历前面七个元素
2.在热河位置上进行插入和删除 都很快
3.插入和删除并不会造成指针,迭代器或引用的失效
list的成员函数
1.不支持随机存取,没有at(),[]运算符
2.list也没有提供容量,内存重分配的函数
3.list提供了一些特殊的成员函数
list不连续 通过循环后移指针
#include <deque>
using std::deque;
#include<list>
using std::list;
#include <vector>
using std ::vector;
bool isBase(int var)//只能有一个参数 返回值为奇数
{
return var%==;
}
bool isMin(int a,int b)//返回最小值
{
return a<b;
}
bool isMax(int a,int b)//返回最大值
{
return a>b;
}
//bool sort(int arr[],int len,bool (*isFun)(int,int))//三个参数 数组 长度 返回值(最大 最小)
//{
// for (int i=0;i<len-1;i++)
// {
// for (int j=i+1;j<len;++j)
// {
// if (isFun(arr[i],arr[j]))//调用isFun函数 使用isMin或者isMax做参数进行升序或者降序
// {
// int temp=arr[i];
// arr[i]=arr[j];
// arr[i]=temp;
// }
// }
// }
//}这是一种排序的方式
int main()
{
//deque<int> d;//定义一个队列指针
//for (int i = 0; i < 10; ++i)//在队尾插入十个元素
// d.push_back(i + 1);
//for (int i = 0; i < 5; ++i)//在队头插入5个元素
// d.push_front((i + 1) * 10); //printf("%d\n",d[9]);//输出第十个数字 //deque<int>::iterator dit;//引入迭代器
//for (dit = d.begin(); dit != d.end(); ++dit)//遍历输出数组里的所有元素 然后进行输出
// printf("%d\n",*dit);
list<int> myList;
for (int i=;i<;i++)
{
myList.push_back(i+);//双向链表的尾插
}
myList.push_front();//在头部插入一个数字1
//myList.pop_back();//在尾部进行删除
//myList.pop_front();//在头部进行删除
list<int>::iterator myIt,mm;//迭代器进行排序
myIt=myList.begin();
for (int i=;i<;++i)
myIt++;//指针往后移四位
mm=myIt;
for (int i=;i<;++i)
{
mm++;
}//指针再往后移动五位
myList.push_back();
myList.push_back();
myList.push_back();
myList.push_back();//往后追加四个元素
//myList.remove(1);//把list中所有元素值为参数这个值的元素删除 把所有的1删除
//myList.remove_if(isBase);//删除list中所有的元素与isBase这个函数做操作后结果为true的元素
//isBase只能有一个参数
//myList.unique();//无参函数,如果存在若干相邻且数值相同,删除重复元素,只留下一个
//myList.unique(isMin);//如果存在若干相邻,且这两个相邻的数进入isMin函数后结果为true,认为也是重复元素,删除重复,只留一个
list<int> myList_1;
list<int>::iterator myIt1;
myIt1=myList_1.begin();//迭代器指向起始位置
//myList_1.splice(myIt1, myList);//把myList里面的所有元素移动到myList_1的MyIt1这个迭代器位置
//myList_1.splice(myIt1, myList, myIt);
//myList_1.splice(myIt1, myList, myIt, mm); //myList.sort();//没有参数
//myList.sort(isMax); //myList.reverse();//反序
myList.clear();
//for (int i = 0; i < 5; ++i)
// myList.push_back((i + 1) * 2);
myList.push_back();
myList.push_back();
myList.push_back();
myList.push_back();
myList.push_back();
myList.sort(isMax); myList_1.clear();
//for (int i = 0; i < 5; ++i)
// myList_1.push_back(i * 2 + 1);//尾部压入
myList_1.push_back();
myList_1.push_back();
myList_1.push_back();
myList_1.push_back();
myList_1.push_back();
myList_1.sort(isMax);
//myList.merge(myList_1);//myList和myList_1必须是已经排好序的容器,且排序规则是一致的,升序
myList.merge(myList_1,isMax); for (myIt = myList.begin(); myIt != myList.end(); ++myIt)//遍历myList的李的所有元素
printf("%d\n",*myIt); printf("//=================\n"); for (myIt1 = myList_1.begin(); myIt1 != myList_1.end(); ++myIt1)//遍历myList_1的所有元素
printf("%d\n", *myIt1); getchar();
return ;
}
deque & list的更多相关文章
- C++ std::deque
std::deque template < class T, class Alloc = allocator > class deque; Double ended queue deque ...
- collections 模块(namedtuple, deque, Counter )
基本介绍 我们都知道,Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型 ...
- vector、list、deque三者比较
1.vector是一段连续的内存块,而deque是多个连续的内存块,list是所有数据元素分开保存,可以是任何两个元素都没有连续. 2.vector的查询性能最好,并且的末端增加数据也很好,除非它重新 ...
- STL之deque
deque是一种优化了的,对序列两段进行添加和删除操作的基本序列容器.它允许较为快速的随机访问,但它不像vector把所有对象保存在一块连续的内存块,而是采用多个连续的存储块.向deque两段添加或删 ...
- Deque的部分成员函数 解析,关于这个类,百度有很多解析,唯独没有其函数介绍
函数 描述 c.assign(beg,end) c.assign(n,elem) 将[beg; end)区间中的数据赋值给c. 将n个elem的拷贝赋值给c. c.at(idx) 传回索引idx所指的 ...
- Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)
Counter(计数器) 是一个字典的子类,存储形式同样为字典,其中存储的键为字典的元素,值为元素出现的次数,在使用之前我们需要先导入文件 import collections 初始化一个计数器 im ...
- 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)
Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuq ...
- 利用python的双向队列(Deque)数据结构实现回文检测的算法
#!/usr/bin/env python # -*- coding: utf-8 -*- # learn <<Problem Solving with Algorithms and Da ...
- Python强化训练笔记(七)——使用deque队列以及将对象保存为文件
collections模块中的deque对象是一个队列,它有着正常队列的先进先出原则.我们可以利用这个对象来实现数据的保存功能. 例如,现有一个猜数字大小的游戏,系统开始会随机roll点一个0-100 ...
- STL之序列容器deque
首先看看deque的模板声明: template <class T, class Alloc = allocator<T>> // 原本还有个参数BufSize,现在新版本 ...
随机推荐
- 电影网站的电影m3u8源址分享(存储于mysql数据库,可直接应用在电影网站上使用)
说明: 1.包含一个films.sql文件,基于mysql5.6的数据表导出文件. 2.该sql文件里面包含一个mysql数据表films,内含35000部电影m3u8源地址. 3.films数据表包 ...
- 实验吧-杂项-MD5之守株待兔(时间戳&python时间戳函数time.time())
其实也有点蒙圈,因为从没做过和时间戳有关的题. 打开网站,将系统密钥解密得到一串值,而自己的密钥解密是空的,既然说是要和系统匹配,就把解密得到的值以get方式送出去. 但是发现还是在自己的密钥也发生了 ...
- python连接 ssh
import paramiko # private = paramiko.RSAKey.from_private_key() 秘钥 trans = paramiko.Transport((" ...
- Hbase PleaseHoldException错误
PleaseHoldException ① 原因:(由于正在操作Hbase时,电脑突然关机,未正常关闭hbase,故导致shell无法正常显示)如下图: ②解决过程: 先在网上百度到了使用https: ...
- 基础语法-循环结构do...while
基础语法-循环结构do...while 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.do...while语句格式 do{ 执行语句; }while(条件表达式); 温馨提示: ...
- Vulkan SDK 之 Depth Buffer
深度缓冲是可选的,比如渲染一个3D的立方体的时候,就需要用到深度缓冲.Swapchain就算有多个images,此时深度缓冲区也只需要一个.vkCreateSwapchainKHR 会创建所有需要的i ...
- DevOps专题|玩转Kubernetes网络
Kubernetes无疑是当前最火热的容器编排工具,网络是kubernetes中非常重要的一环, 本文主要介绍一些相应的网络原理及术语,以及kubernetes中的网络方案和对比. Kubernete ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring JDK动态代理
JDK 动态代理是通过 JDK 中的 java.lang.reflect.Proxy 类实现的.下面通过具体的案例演示 JDK 动态代理的使用. 1. 创建项目 在 MyEclipse 中创建一个名称 ...
- 统计Shell脚本执行时间
统计Shell脚本执行时间,帮助分析改进脚本执行 用 date 相减 #!/bin/bash startTime=`date +%Y%m%d-%H:%M:%S` startTime_s=`date + ...
- 进度4_家庭记账本App
在上一个博客中,我学习了用Fragment进行数据的传值,但是出现了好多问题,我通过百度查阅资料发现fregment在进行数值传输的时候有的语法不能使用,并且不方便的进行数据库的使用,所以我在原来的家 ...