STL——容器(deque)deque 的删除 clear() erase()
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()的更多相关文章
- STL——容器(deque) 构造 & 头尾添加删除元素
1.deque容器概念 deque是"double-ended queue"的缩写,和vector一样都是STL的容器,唯一不同的是:deque是双端数组,而vector是单端的. ...
- STL容器:deque双端队列学习
所谓deque,是"double-ended queue"的缩写; 它是一种动态数组形式,可以向两端发展,在尾部和头部插入元素非常迅速; 在中间插入元素比较费时,因为需要移动其它元 ...
- STL容器分析--deque
deque,故名思义,双向队列.可以在头尾进行插入删除. 而STL中采用了链表+线性表的数据结构来实现deque,因而除了满足双向队列的特点以外,还支持随机访问. 下面,贴一段代码. 总览:双向队列是 ...
- STL——容器(deque) deque 的大小
1. deque 的大小 deque.size(); //返回容器中元素的个数 1 #include <iostream> 2 #include <dequ ...
- STL——容器(deque) 元素的存取&迭代器
1. deque 的数据存取 这个部分和 vector 几乎一样 第一 使用下标操作 dequeName[0] = 100; //小心越界 第二 使用at 方法 如: dequeName.at(2 ...
- STL——容器(deque)deque 的插入 insert()
deque.insert(pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置. 1 #include <iostream> 2 #include <d ...
- STL——容器(deque) deque 的赋值 assign() operator=() swap()
deque 的赋值分下边4种方法: deque.assign(beg,end); //将[beg, end)区间中的数据拷贝赋值给本身.注意该区间是左闭右开的区间. 1 #include <io ...
- ACM常用STL容器
// STL(标准模板库),由三大部分组成:容器,算法,迭代器 // STL六大组件:container(容器),algorthm(算法),iterator(迭代器) // function obje ...
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
序列性容器::(vector和list和deque) erase迭代器不仅使所有指向被删元素的迭代器失效,而且使被 删元素之后的所有迭代器失效,所以不能使用erase(iter++)的方 式, ...
随机推荐
- Java字符类型(详解)
[1]Java中使用单引号来表示字符常量,字符型在内存中占2个字节. char 类型用来表示在Unicode编码表中的字符.Unicode编码被设计用来处理各种语言的文字,它占2个字节,可允许有655 ...
- Pinpoint 编译环境搭建(Pinpoint系列一)
本文基于 Pinpoint 2.1.0 版本 目录 一.2.1.0 版本特性 二.编译环境准备 三.编译注意事项 四.编译目录 五.注意事项 新版本的内容参考官方文档, Pinpoint的整个搭建是历 ...
- 如何用FL Studio将乐器组合与分层
有过音乐制作经历的小伙伴应该知道,我们在用以FL Studio20为代表的音乐编曲软件制作音乐时,往往需要在同一节奏点添加多种音效,这样可以使音乐听起来更具层次感.正因如此,我们就需要不断添加音符,就 ...
- 「CSP-S 2019」划分
description loj 3212 solution 首先容易想到\(n^3\)DP,即令\(f_{i,j}\)表示前\(i\)个数的划分,其中最后一段是从\(j\)开始时的答案 于是有 \[f ...
- C#6,C#7,V#8,C#9 的新特性总结
看了一下,下图的所有我都有用过,感觉越高的版本越好用. C# 6.0 特性 C# 7.0 Vs2017 C# 8.0 .net core 3.0+ C#9.0 .net5 C#的各种语法糖, ...
- jmeter压测mysql数据库
jmeter连接并压测mysql数据库,之前一直想用jmeter一下测试mysql数据库的性能,今天偶然看到一篇博客,于是乎开始自己动手实践. 一.准备工作 1.安装好mysql数据库,可以安装在本地 ...
- 在VMware下创建windows server 2008虚拟机
1.创建新的虚拟机 打开VMware软件,点击主页内创建新的虚拟机 2.进入新建虚拟机向导 点击典型,点击下一步 3.在下一步中单击稍后安装操作系统 点击下一步 4.选择操作系统类型 客户机操作系统选 ...
- 01_Activity生命周期及传递数据
1. Activity的生命周期: 2. Activity启动另一个Activity,并传递数据: package com.example.activitydemo; import android.a ...
- 将Shiny APP搭建为独立的桌面可执行程序 - Deploying R shiny app as a standalone application
目录 起源! 目的? 怎么做? 0 准备工作 1 下载安装R-portable 2 配置 Rstudio 3 搭建Shiny App 3.1 添加模块 3.2 写AppUI和AppServer 3.3 ...
- java并发编程实战《七》安全性、活跃性以及性能问题
安全性.活跃性以及性能问题 安全性问题 那什么是线程安全呢?其实本质上就是正确性,而正确性的含义就是程序按照我们期望的执行,不要让我们感到意外. 存在共享数据并且该数据会发生变化,通俗地讲就是有多个线 ...