C++ STL 容器-Deque
C++ STL 容器-Deque
std::deque(双端队列)是C++标准模板库(STL)中的一个容器,它支持在序列的两端快速插入和删除元素。与std::vector和std::list等其他序列容器相比,std::deque在某些特定场景下具有独特的优势。
元素的访问和迭代比vector慢,迭代器不是普通的指针。
以下是std::deque的一些主要特点和用法:
双端操作:std::deque允许在其前端和后端都进行插入和删除操作,且这些操作的时间复杂度都是O(1)。这意味着在序列的两端添加或删除元素非常高效。
连续存储:虽然std::deque允许在两端进行快速操作,但它在内部可能并不保证元素的连续存储。这意味着它不支持指针或迭代器之间的算术运算。
内存分配:std::deque通常通过分段连续空间来存储元素,这意味着它在内存分配方面可能比std::vector更灵活,尤其是在涉及大量插入和删除操作时。
迭代器类型:std::deque提供了随机访问迭代器,这意味着你可以使用迭代器进行算术运算,如++、--、+=、-=等。
void mytest()
{
using Group = std::deque<float>;
// 或者 typedef std::vector<float> Group;
// 初始化
Group a;
Group b=a;
Group c(a);
Group d(1.1);
Group e(1.1,2.2);
Group f(e.begin(),e.end());
Group g({1.0f,2.0f,3.0f});
Group h = {1.0f,2.0f};
auto bol = d.empty();
std::cout<< d.size()<<'\n';
std::cout<< d.max_size()<<'\n';
std::cout<< d.max_size()<<'\n';
//支持的操作operator == != <> <= >=
// 赋值操作
b = g;
b.assign(3,1.0f); //赋值三个1.0f
b.assign(g.begin(),g.end());
b.assign({1.0f,2.0f,3.0f});
// 交换
b.swap(a);
std::swap(a,b);
// 元素访问
auto b0 =b[0];
auto ba0 =b.at(0);
auto bf1 =b.front();//访问第一个元素的引用
auto bb1 =b.back();//访问最后一个元素的引用
// 迭代器
auto lb1 =a.begin();
auto le1 =a.end();
auto lcb1 =a.cbegin();
auto lce1 =a.cend();
auto lb2 =a.rbegin();
auto le2 = a.rend();
auto cb = a.crbegin();
auto ce = a.crend();
a.pop_back();//弹出最后一个元素
b.erase(b.begin());//销毁第一个元素
b.erase(b.begin(),b.end());//销毁全部元素
b.push_back(10.0f);//添加浮点数到末尾
b.push_front(2.0f);//添加浮点数到头部
b.pop_back();
b.pop_front();//弹出头部
// 插入数据
auto iter = b.insert(b.end(),100.0f);//在b的最后插入一个100.0f,并且返回这个插入位置的迭代器
iter = b.insert(b.end(),10,-10.0f);//插入10个float,返回最后迭代器位置
b.insert(b.end(),h.begin(),h.end());
b.emplace(b.end(),10.0f);
b.emplace_back(10.11f);
b.resize(10);
b.resize(100,1.1f);
b.clear();
b.shrink_to_fit();
}
C++ STL 容器-Deque的更多相关文章
- STL - 容器 - Deque
Deque和Vector类似,只不过deque头尾都开放,能够在头尾进行快速插入和删除操作 DequeTest.cpp #include <iostream> #include <d ...
- 带你深入理解STL之Deque容器
在介绍STL的deque的容器之前,我们先来总结一下vector和list的优缺点.vector在内存中是分配一段连续的内存空间进行存储,其迭代器采用原生指针即可,因此其支持随机访问和存储,支持下标操 ...
- STL容器 vector,list,deque 性能比较
C++的STL模板库中提供了3种容器类:vector,list,deque对于这三种容器,在觉得好用的同时,经常会让我们困惑应该选择哪一种来实现我们的逻辑.在少量数据操作的程序中随便哪一种用起来感觉差 ...
- [转]STL之deque容器详解
Deque 容器 deque容器是C++标准模版库(STL,Standard Template Library)中的部分内容.deque容器类与vector类似,支持随机访问和快速插入删除,它在容器中 ...
- STL——容器(deque) 元素的存取&迭代器
1. deque 的数据存取 这个部分和 vector 几乎一样 第一 使用下标操作 dequeName[0] = 100; //小心越界 第二 使用at 方法 如: dequeName.at(2 ...
- STL容器删除元素的陷阱
今天看Scott Meyers大师的stl的用法,看到了我前段时间犯的一个错误,发现我写的代码和他提到错误代码几乎一模一样,有关stl容器删除元素的问题,错误的代码如下:std::vector< ...
- STL容器迭代器失效分析
连续内存序列容器(vector, string, deque) 对于连续内存序列STL容器,例如vector,string,deque,删除当前iterator会使得后面所有的iterator都失效, ...
- STL容器的适用情况
转自http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/ ly; mso-default-props:yes; m ...
- STL容器的遍历删除
STL容器的遍历删除 今天在对截包程序的HashTable中加入计时机制时,碰到这个问题.对hash_map中的每个项加入时间后,用查询函数遍历hash_map,以删除掉那些在表存留时间比某个阈值长的 ...
- STL容器与配接器
STL容器包括顺序容器.关联容器.无序关联容器 STL配接器包括容器配接器.函数配接器 顺序容器: vector 行为类似于数组,但可以根据要求 ...
随机推荐
- TC插件管理器及在TC中新建文件
新建文件 Shift+F4可以新建文件,但是会调用内置的编辑器来打开. 在设置中通过修改F4快捷键对应的程序来修改. PS.F4编辑没找到根据扩展名来调用指定程序打开,可以F3中进行补充. NewFi ...
- 微信小程序-页面跳转navigator组件
官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/route.html 在官方文档当中有提到一 ...
- 【六】强化学习之DQN---PaddlePaddlle【PARL】框架{飞桨}
相关文章: [一]飞桨paddle[GPU.CPU]安装以及环境配置+python入门教学 [二]-Parl基础命令 [三]-Notebook.&pdb.ipdb 调试 [四]-强化学习入门简 ...
- 多智能体强化学习算法【一】【MAPPO、MADDPG、QMIX】
相关文章: 常见多智能体强化学习仿真环境介绍[一]{推荐收藏,真的牛} 多智能体强化学习算法[一][MAPPO.MADDPG.QMIX] 多智能体强化学习算法[二][MADDPG.QMIX.MAPPO ...
- Linux的进程管理 [补档-2023-07-25]
Linux进程管理 9-1并发与并行: 并发:在同一个cpu上,并且在一个时间段时,同时运行多个程序.比如在1000毫秒内,我们有5个程 序需要执行,所以我们可以将1000毫秒分为5个200毫秒, ...
- 发布三个月跳水超1000!苹果M2版Mac mini降到3478元了
快科技4月18日消息,苹果在今年1月17日晚,在官网上架了新款的Mac mini,搭载了M2芯片,起售价4499元. 当时该产品配合上教育优惠,一度被认为是"香爆了"的产品,如今距 ...
- 树莓派4B改造成云桌面客户端,连接DoraCloud免费版
Raspberry Pi(树莓派) 是为学习计算机编程教育而设计的只有信用卡大小的微型电脑,自问世以来受众多计算机发烧友和创客的追捧,曾经一"派"难求. DoraCloud是一款多 ...
- 分享实用小工具:JAVA版本位运算工具类
将二进制数中的每位数字1或0代表着某种开关标记,1为是,0为否,则一个数字可以代表N位的开关标记值,可有效减少过多的变量定义 或 过多的表字段,同时也能在一些复杂的组合判断场景下利用位与.位或.异或等 ...
- Oracle配置DCD避免会话被防火墙强制断开
今天有客户反馈应用测试连接Oracle数据库的会话半小时左右未做操作就会被中断,报错ORA-3113,询问数据库是否有这样的超时设置,能否取消掉这个限制? 登上环境查看监听日志发现连接的IP和数据库I ...
- TStringList,的IndexOf,find,IndexOfName 例子
a=wokao b=in c=wori d=ri e=我靠 f=我插 procedure TForm1.Button1Click(Sender: TObject); var MyList: TStri ...