deque.clear();

//移除容器的所有数据

 1 #include <iostream>
2 #include <deque>
3
4 using namespace std;
5
6 int main()
7 {
8 int num[] = { 111,222,333,444,555 };
9 deque<int> deqInt_A(num, num + size(num));
10
11 cout << "deqInt_A中的元素个数为:";
12 cout << deqInt_A.size() << endl;
13
14 cout << "deqInt_A所占用内存:";
15 cout << sizeof(deqInt_A) << endl;
16
17 cout << "遍历deqInt_A:";
18 for (deque<int>::iterator it = deqInt_A.begin(); it != deqInt_A.end(); it++)
19 {
20 cout << *it << " ";
21 }
22
23 //删除容器中
24 deqInt_A.clear();
25
26 cout << "\n\nclear后,deqInt_A中的元素个数为:";
27 cout << deqInt_A.size();
28 cout << "\ndeqInt_A所占用内存:";
29 cout << sizeof(deqInt_A);
30 cout << "\nclear后,遍历deqInt_A:" << endl;
31 for (deque<int>::iterator it = deqInt_A.begin(); it != deqInt_A.end(); it++)
32 {
33 cout << *it << " ";
34 }
35
36 return 0;
37 }

打印结果:

可以发现内存是并没有释放的

deque.erase(beg,end);

//删除[beg,end)区间的数据,返回下一个数据的位置。

 1 #include <iostream>
2 #include <deque>
3
4 using namespace std;
5
6 int main()
7 {
8 int num[] = { 111,222,333,444,555 };
9 deque<int> deqInt_A(num, num + size(num));
10
11 cout << "遍历deqInt_A:";
12 for (deque<int>::iterator it = deqInt_A.begin(); it != deqInt_A.end(); it++)
13 {
14 cout << *it << " ";
15 }
16 cout << "\ndeqInt_A中的元素个数为:";
17 cout << deqInt_A.size() << endl;
18
19 cout << "deqInt_A所占用内存:";
20 cout << sizeof(deqInt_A) << endl;
21
22
23
24 cout << "\n删除容器中前三个元素后,遍历deqInt_A:";
25 //删除容器中前三个元素后,用返回的迭代器遍历,返回了下一个元素的位置
26 for (deque<int>::iterator it = deqInt_A.erase(deqInt_A.begin(), deqInt_A.begin() +3); it != deqInt_A.end(); it++)
27 {
28 cout << *it << " ";
29 }
30 cout << "\n删除容器中前三个元素后,deqInt_A中的元素个数为:";
31 cout << deqInt_A.size();
32
33 cout << "\n删除容器中前三个元素后,deqInt_A所占用内存:";
34 cout << sizeof(deqInt_A);
35
36 return 0;
37 }

打印结果:

可以发现,deqInt_A中的元素删除后,占用的内存空间大小并没有变化

deque.erase(pos);

//删除pos位置的数据,返回下一个数据的位置。

 1 #include <iostream>
2 #include <deque>
3
4 using namespace std;
5
6 int main()
7 {
8 int num[] = { 111,222,333,444,555 };
9 deque<int> deqInt_A(num, num + size(num));
10
11 cout << "遍历deqInt_A:";
12 for (deque<int>::iterator it = deqInt_A.begin(); it != deqInt_A.end(); it++)
13 {
14 cout << *it << " ";
15 }
16 cout << "\ndeqInt_A中的元素个数为:";
17 cout << deqInt_A.size() << endl;
18
19 cout << "deqInt_A所占用内存:";
20 cout << sizeof(deqInt_A) << endl;
21
22 cout << "\n删除容器中第三个元素后边的元素后,用返回的迭代器遍历后边的元素:";
23 //删除容器中第三个元素后边的元素后,用返回的迭代器遍历,返回了下一个元素的位置,注意这个数字不是第三个,是第三个之后的那个元素
24 for (deque<int>::iterator it = deqInt_A.erase(deqInt_A.begin() + 3); it != deqInt_A.end(); it++)
25 {
26 cout << *it << " ";
27 }
28 cout << "\n遍历 deqInt_A 中所有的元素:";
29 for (deque<int>::iterator it = deqInt_A.begin(); it != deqInt_A.end(); it++)
30 {
31 cout << *it << " ";
32 }
33 cout << "\n删除容器中第三个元素后边的元素后,deqInt_A中的元素个数为:";
34 cout << deqInt_A.size();
35
36 cout << "\n删除容器中第三个元素后边的元素后,deqInt_A所占用内存:";
37 cout << sizeof(deqInt_A);
38
39 return 0;
40 }

打印结果:

一般在项目中删除单个元素会这样用:

 1 #include <iostream>
2 #include <deque>
3
4 using namespace std;
5
6 int main()
7 {
8 int num[] = { 111,222,333,444,555 };
9 deque<int> deqInt_A(num, num + size(num));
10
11 //删除等于 444 的元素
12 for (deque<int>::iterator it = deqInt_A.begin(); it != deqInt_A.end();)
13 {
14 if (*it == 444)
15 {
16 it = deqInt_A.erase(it); //删除元素后,erase 会返回下一个元素的位置,相当于 it++操作了
17 }
18 cout << *it << " ";
19 it++; //不把it++ 写到for循环的条件语句中,是为了避免删除元素后的越界访问,比如删除 444 后,555会在444的位置,这时候it++就会越界
20 }
21
22 return 0;
23 }

打印结果:

=======================================================================================================================

STL——容器(deque)deque 的删除 clear() erase()的更多相关文章

  1. STL——容器(deque) 构造 & 头尾添加删除元素

    1.deque容器概念 deque是"double-ended queue"的缩写,和vector一样都是STL的容器,唯一不同的是:deque是双端数组,而vector是单端的. ...

  2. STL容器:deque双端队列学习

    所谓deque,是"double-ended queue"的缩写; 它是一种动态数组形式,可以向两端发展,在尾部和头部插入元素非常迅速; 在中间插入元素比较费时,因为需要移动其它元 ...

  3. STL容器分析--deque

    deque,故名思义,双向队列.可以在头尾进行插入删除. 而STL中采用了链表+线性表的数据结构来实现deque,因而除了满足双向队列的特点以外,还支持随机访问. 下面,贴一段代码. 总览:双向队列是 ...

  4. STL——容器(deque) deque 的大小

    1. deque 的大小 deque.size();              //返回容器中元素的个数 1 #include <iostream> 2 #include <dequ ...

  5. STL——容器(deque) 元素的存取&迭代器

    1. deque 的数据存取 这个部分和 vector 几乎一样 第一  使用下标操作 dequeName[0] = 100; //小心越界 第二  使用at 方法 如: dequeName.at(2 ...

  6. STL——容器(deque)deque 的插入 insert()

    deque.insert(pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置. 1 #include <iostream> 2 #include <d ...

  7. STL——容器(deque) deque 的赋值 assign() operator=() swap()

    deque 的赋值分下边4种方法: deque.assign(beg,end); //将[beg, end)区间中的数据拷贝赋值给本身.注意该区间是左闭右开的区间. 1 #include <io ...

  8. ACM常用STL容器

    // STL(标准模板库),由三大部分组成:容器,算法,迭代器 // STL六大组件:container(容器),algorthm(算法),iterator(迭代器) // function obje ...

  9. C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用

    序列性容器::(vector和list和deque)   erase迭代器不仅使所有指向被删元素的迭代器失效,而且使被   删元素之后的所有迭代器失效,所以不能使用erase(iter++)的方 式, ...

随机推荐

  1. Mon失效处理方法

    假设环境为三个mon,主机名为mon1.mon2.mon3,现在mon3上面的系统盘损坏,mon的数据完全丢失,现在需要对mon3进行恢复处理 1.停止所有mon进程,可以不停其他进程,需要停止内核客 ...

  2. Python_图解教程

    说明:本教程用图片+源码讲解Python常见的问题,共勉! 1.Python包的调用   # coding:utf8 # from pakge.mymodel import test from bao ...

  3. DockerPush

    1.阿里云镜像发布流程 2.镜像生成 语法:docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]] [root@pluto data]# docker imag ...

  4. cookie和session的关系和区别

    1.为什么会用到cookie和session 由于http请求是一种无状态的请求,一旦数据交换完毕便会关闭请求,再次交换数据则要再次发起请求,所以服务端无法通过连接追踪会话,确定用户身份,而cooki ...

  5. python-基础入门-5(模块、类和对象)

    模块 模块用import来调用,例如 from sys import argv 调用sys中argv模块 在模块里有多个def的函数 import调用全部或其中一个 类和对象 下面定义了一个类 1 c ...

  6. 建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上

    前言 对于大厂面试,我想要强调的一点就是心态真的很重要,是决定你在面试过程中发挥的关键,若不能正常发挥,很可能就因为一个小失误与offer失之交臂,所以一定要重视起来.另外提醒一点,充分复习,是消除你 ...

  7. 怎么用MindManager制作议论文思维导图

    大家都写过作文吧,做小学到高考到大学,这是谁也摆脱不了的,但是大家写作文会提前把自己的思路整理出来吗?让自己行文更为顺畅,作文更为流利吗?特别是关于议论文,一直是高考写作的一个重点篇目,写好议论文,就 ...

  8. IDM下载器:站点抓取相关设置介绍

    Internet Download Manager(简称IDM)是一款十分好用资源下载器,它的站点抓取功能不仅可以下载被过滤器指定所需文件,例如一个站点的所有图片,或者一个站点的所有音频,也可以下载站 ...

  9. php form表单提交时,action url中参数无效的解决方法

    表单提交时get方式的一个错误 <form class="form-inline pull-right" method="get" action=&quo ...

  10. Spring 源码阅读环境的搭建

    前言 本文记录了 Spring 源码环境的搭建方式,以及踩过的那些坑!​当前版本:5.3.2-SNAPSHOT. 环境准备 Git JDK master 分支需要 JDK 11 5.2.x 分支, J ...