c++值deque容器

1.deque容器介绍       deque 是 double-ended queue 的缩写,又称双端队列容器。deque容器支持从头部和尾部双端插入、删除数据。与vector容器不同的是,vector容器是一段连续的空间,而deque没有所谓容量的概念,因为它是动态的以分段连续空间组合而成,随时可以增加一段新的空间并连接起来。不会像vector那样,因为空间不足而扩容,复制元素到新的空间,再释放旧的空间。因此deque没有必要提供所谓的扩容(reserve)的功能。
         deque容器可以看做是一个双端数组,可以从头或者尾之间插入数据。从头插入或者删除使用push_front和pop_front。从尾插入或删除输出使用push_backh和pop_back。从任意位置插入可以使用insert函数。
      deque容器,在空间管理上是通过内部中控器来实现的。中控器记录每一个缓冲区的地址。缓冲区中存放真实的数据内容。因而在deque容器中,数据空间是由多段空间组成的。
      deque容器是没有预留空间函数reserve和获取容量大小函数capacity。
      deque从头端插入数据比vector容器快,而且数据量越大越明显。
2.deque容器构造函数       deque容器的构造函数和vector类似,由无参构造、有参构造、拷贝构造。
deque构造函数: deque() --无参构造 deque(begin,end);//有参构造,将begin~end之间的数据拷贝 deque(int count,elem);//count个elem数据 deque(deque &p);//拷贝构造      应用示例:
#include using namespace std;#include #include void printdeque(const deque& p){ for (deque::const_iterator deq = p.begin(); deq != p.end(); deq++) { cout < < *deq < < ; } cout < < endl;}void print(int val){ cout < < val < < ;}void test(){ //创建一个deque容器 deque deq; //插入数据:尾插 deq.push_back(1); deq.push_back(2); deq.push_back(3); //插入数据:头插 deq.push_front(4); deq.push_front(5); deq.push_front(6); cout < < 第一个数据: < < deq.front() < < endl; cout < < 最后一个数据: < < deq.back() < < endl; cout < < 遍历: < < endl; printdeque(deq); cout < < for_each逆向遍历: < < endl; for_each(deq.rbegin(), deq.rend(), print); cout < < endl; cout < < 有参构造: < < endl; deque deq2(deq.rbegin(), deq.rend());//区间赋值 printdeque(deq2); deque deq3(3, 666);//赋值3个666 printdeque(deq3); cout < < 拷贝构造:< < endl; deque deq4(deq);//拷贝构造 printdeque(deq4);}int main(){ test(); system(pause);} 3.deque容器赋值      赋值方式可以直接使用“=”赋值,也可以通过函数assign实现。
deq赋值: 重载=:operator=(); assign(begin,end);//区间赋值 assign(int count,elem);//count个elem     使用示例:
include #include using namespace std;void printdeque(const deque& p){ for (deque::const_iterator deq = p.begin(); deq != p.end(); deq++) { cout < < *deq < < ; } cout < < endl;}void test(){ deque deq; //尾插 deq.push_back(1); deq.push_back(2); deq.push_back(3); //头插 deq.push_front(4); deq.push_front(5); deq.push_front(6); cout < < deq 直接插入 < < endl; printdeque(deq); deque deq2 = deq;//之间赋值 cout < < deq2 =赋值 < < endl; printdeque(deq2); cout < < deq3 区间赋值 < < endl; deque deq3; deq3.assign(deq.begin(), deq.end()); printdeque(deq3);}int main(){ test(); system(pause);} 4.deque设置和获取元素个数      判断容器是否为空可以使用empty()函数,设置元素个数可以使用resize()函数,获取元素个数使用size()函数。
deque容器获取大小: 判断容器是否为空:empty() ---为空返回true 获取容器元素个数:size() 指定容器大小:resize(int num); resize(int num,elem);//指定大小,超出部分用elem填充 resize指定大小,若小于则会将超出部分删除注意: deque容器没有获取容量函数capacity()     使用示例:
#include using namespace std;#include void printdeque(deque& p){ for (deque::iterator deq = p.begin(); deq != p.end(); deq++) { cout < < *deq < < ; } cout < < endl;}void test(){ deque deq; deq.push_back(hello); deq.push_back(学习); deq.push_back(c++); deq.push_back(deque容器); deq.push_back(使用); deq.push_back(示例); printdeque(deq); cout < < 元素个数: < < deq.size() < < endl; deq.resize(10,c++);//指定个数,剩余填充c++; printdeque(deq); deq.resize(3); printdeque(deq); cout < < 元素个数: < < deq.size() < < endl;}int main(){ test(); system(pause);} 5.deque元素的插入与删除     deque容器是双端性质的,所以可以从头端或者尾端插入数据。相关函数如下:
deque容器插入与删除: push_back、pop_back --尾插和尾删 push_front、pop_front --头插和头删除 insert(pos,elem); --pos是一个迭代器,在pos位置插入elem,返回新数据位置 insert(pos,n,elem); ---在pos位置插入n个elem,无返回值 insert(pos,begin,end); --在pos位置插入begin~endl的数据,无返回值 clear() --清空整个deque容器 erase(begin,end); --删除begin~end之间的数,返回下一个数据位置 erase(pos) --删除指定位置的数     使用示例:
#include using namespace std;#include void printdeque(deque& deq){ for (deque::iterator p = deq.begin(); p != deq.end(); p++) { cout < < *p < < ; } cout < < endl;}void test(){ deque deq; //头插 deq.push_front(1); deq.push_front(2); deq.push_front(3); //尾插 deq.push_back(4); deq.push_back(5); deq.push_back(6); cout < < t插入数据示例: < < endl;; printdeque(deq); deq.pop_back();//尾删 deq.pop_front();//头删 cout < < t删除数据示例: < < endl;; printdeque(deq); cout < < tinsert插入数据示例: < < endl; deq.insert(deq.begin() + 2, 666);//在起始的第二个位置插入666 deq.insert(deq.begin() + 5, 3, 888);//在起始的第5个位置插入三个888 printdeque(deq); deque deq2; cout < < tinsert区间插入数据示例: < < endl; deq2.insert(deq2.begin(), deq.begin() + 5, deq.begin() + 8);//在deq2的起始位置插入deq的第5~8个位置的数 printdeque(deq2); //删除数据 cout < < 指定位置删除: < < endl; deq.erase(deq.begin() + 2);//删除第2个位置的数 printdeque(deq); cout < < 指定区间删除: < < endl; deq.erase(deq.begin() + 3, deq.begin() + 6);//删除第3~6位置上的数 printdeque(deq); cout < < 清空: < < endl; deq2.clear(); printdeque(deq2);}int main(){ test(); system(pause);} 6.deque容器数据存取      deque可以通过[]读写数据,也可以通过函数at()来实现。
deque容器数据存取: 重载[]:operator[]() at(pos); 获取第一个成员:front 获取最后一个成员:back 第一个成员的前一个位置:rend 最后一个成员的下一个位置:end     使用示例:
#include using namespace std;#include #include void test(){ deque deq; deq.push_back(hello); deq.push_back(c++); deq.push_back(学习); deq.push_back(示例); cout < < 最后一个成员: < < deq.back() < < endl; cout < < 第一成员: < < deq.front() < < endl; cout< <遍历: 7.排序      可以使用sort函数对成员进行排序。该函数的头文件是algorithm。
排序:sort(iterator begin,iterator end);//默认是升序       使用示例:
#include #include #include #include using namespace std;void test(){ string str = hello,world; sort(str.begin(), str.end()); cout < < str < < endl; deque deq; deq.push_back(0); deq.push_back(2); deq.push_back(1); deq.push_front(4); deq.push_front(5); deq.push_front(6); cout < < 原内容: < < endl; for (int i = 0; i < deq.size(); i++) { cout < < deq[i] < < ; } cout < < endl; cout < < 排序后: < < endl; sort(deq.begin(), deq.end()); for (int i = 0; i < deq.size(); i++) { cout < < deq[i] < < ; } cout < < endl; cout < < 数组排序: < < endl; int buff[] = { 1,2,3,6,4,0,8,7,2 }; sort(buff, buff+ sizeof(buff) / sizeof(int)); for (int i = 0; i < sizeof(buff) / sizeof(int); i++) { cout < < buff[i] < < ; }}int main(){ test(); system(pause);}


东方银星发布拟发起成立半导体产业基金的公告
人工智能/机器学习使原型设计变得越来越具有挑战性
GE宣布推出增强版ICS-8580加固型高清视频压缩XMC模块
Li-ion电池有哪些优点?哪些缺点?
2018什么电视盒子比较好?好评率最高的四大旗舰王
c++值deque容器
【服务器数据恢复】EMC Unity存储数据恢复案例
汇总在事件抽取方向的相关厂商调研结果
华为P30ProDxOMark成绩公布 后置相机排行榜第一名
爱立信与中国移动携手在5G商用网络中完成与多款商用RedCap芯片模组的互操作验证
工业机器人编程入门_工业机器人的编程要求
STM32的8*8点阵屏开发-小玩具
四大家族新品大PK:全新KUKA KR 4 AGILUS耀眼首发
喷码机的市场现状分析及其特点
Tina Linux PMU开发指南
射频隐身技术是什么 射频隐身核心技术分类有哪些
Microchip PIC单片机12864汉字液晶模块显示文字
TCL V8全场景AI电视将成为未来语音交互的引领者
大众e-up电动汽车系统结构原理分析
LC低通滤波器的截止频率是怎么推导出来的?公式是什么?