STL常用容器——deque容器的使用

2023-05-16

文章目录

  • STL常用容器——deque容器的使用
    • 1、deque 容器简介
    • 2、deque容器的构造函数
    • 3、deque的赋值操作
    • 4、deque大小操作
    • 5、deque容器添加和删除元素
    • 6、deque容器访问元素
    • 7、容器内元素排序

STL常用容器——deque容器的使用

1、deque 容器简介

deque容器介绍

deque(double-ended queue):双端队列容器。

deque 容器适用于在序列头部和尾部添加或删除元素(时间复杂度为O(1)),而不适用于在序列中间添加或删除元素,当需要向序列两端频繁的添加或删除元素时,使用 deque 容器效率高。

deque 容器也可以根据需要修改自身的容量和大小。

deque 容器中存储元素并不能保证所有元素都存储到连续的内存空间中。

deque容器和vector容器的区别

  • deque容器在序列头部添加和删除元素的速度会比vector容器快,vector容器在序列头部添加和删除元素时,数据量越大,效率越低;
  • 在序列尾部追加元素操作,vector速度更快;
  • vector容器遍历元素时的速度会比deque快。

2、deque容器的构造函数

deque deqT; //默认构造形式

deque(beg , end); //构造函数将[beg , end) 区间中的元素拷贝给本身

deque(n); //构造一个具有 n 个元素的 deque 容器,其中每个元素都采用对应类型的默认值

deque(n,elem); //构造函数将n个elem元素赋值给本身

deque(const deque &deq); //拷贝构造函数

代码实例:

#include<iostream>
using namespace std;
#include<deque>

void printDeque(const deque<int>& d)
{
	for (deque<int> ::const_iterator it = d.begin(); it != d.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test1()
{
	//默认构造
	deque<int> d1;
	for (int i = 0; i < 10; i++)
	{
		d1.push_back(i);
	}
	printDeque(d1);

	//区间构造
	deque<int> d2(d1.begin(), d1.end());
	printDeque(d2);

    //赋值构造
    deque<int> d5(7);
	printDeque(d5);
    
	//赋值构造
	deque<int> d3(7,5);
	printDeque(d3);

	//拷贝构造
	deque<int> d4(d3);
	printDeque(d4);
}

int main()
{
	test1();
	system("pause");
	return 0;
}

在这里插入图片描述

3、deque的赋值操作

deque& operator=(const vector &vec); //重载等号操作符

assign(beg,end); //将[beg,end)区间中的数据拷贝赋值给本身

assign(n,elem); //将n个elem拷贝赋值给本身

代码实例:

#include<iostream>
using namespace std;
#include<deque>

void printDeque(const deque<int>& d)
{
	for (deque<int> ::const_iterator it = d.begin(); it != d.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test1()
{
	//默认构造
	deque<int> d1;
	for (int i = 0; i < 10; i++)
	{
		d1.push_back(i);
	}
	printDeque(d1);

	deque<int> d2 = d1;
	printDeque(d2);
	
	deque<int> d3;
	d3.assign(d1.begin(), d1.end());
	printDeque(d3);

	deque<int> d4;
	d4.assign(6, 7);
	printDeque(d4);
}

int main()
{
	test1();
	system("pause");
	return 0;
}

在这里插入图片描述

4、deque大小操作

deque.empty(); //判断容器是否为空

deque.size(); //返回容器中元素的个数

deque.resize(num); //重新指定容器的长度为num,如果容器变长,以对应类型的默认值填充,如果容器变短,超出容器长度的元素被删除

deque.resize(num,elem);//重新指定容器的长度为num,如果容器变长,以elem填充,如果容器变短,超出容器长度的元素被删

代码实例:

#include<iostream>
using namespace std;
#include<deque>

void printDeque(const deque<int>& d)
{
   for (deque<int> ::const_iterator it = d.begin(); it != d.end(); it++)
   {
   	cout << *it << " ";
   }
   cout << endl;
}

void test1()
{

   deque<int> d1;
   for (int i = 0; i < 10; i++)
   {
   	d1.push_back(i);
   }

   d1.resize(12);
   printDeque(d1);

   d1.resize(6, 7);
   printDeque(d1);

   deque<int> d4;
   if (d4.empty())
   {
   	cout << "容器为空" << endl;
   }
}

int main()
{
   test1();
   system("pause");
   return 0;
}

在这里插入图片描述

5、deque容器添加和删除元素

deque容器中添加或删除元素的成员函数:

成员函数功能
push_back()在容器尾部添加一个元素,该函数添加新元素的过程是,先构造元素,然后再将该元素移动或复制到容器的尾部
pop_back()删除容器尾部的一个元素
push_front()在容器头部插入一个元素,该函数添加新元素的过程是,先构造元素,然后再将该元素移动或复制到容器的头部
pop_front()删除容器尾部的一个元素
insert(pos,elem)在pos位置之前插入一个elem元素的拷贝,返回新数据的位置。该函数添加新元素的过程是,先构造元素,然后再将该元素移动或复制到容器的指定位置
insert(pos,n,elem)在pos位置之前插入n个elem数据,无返回值
insert(pos,beg,end)在pos位置之前插入 [ beg,end) 区间的数据,无返回值
insert(pos,initlist)在pos 指定的位置之前,插入初始化列表中所有的元素,并返回表示第一个新插入元素的位置
erase(beg,end)移除[beg,end)区域内的元素,返回下一个数据的位置
erase(pos)删除pos位置的元素,返回下一个数据的位置
clear()清空容器的所有元素

代码实例:

#include<iostream>
using namespace std;
#include<deque>

void printDeque(const deque<int>& d)
{
	for (deque<int> ::const_iterator it = d.begin(); it != d.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test1()
{
	
	deque<int> d1;
	for (int i = 0; i < 10; i++)
	{
		d1.push_back(i);
	}
	//尾插
	d1.push_back(1);
	d1.push_back(2);
	//头插
	d1.push_front(11);
	d1.push_front(12);
	printDeque(d1);

	//删除
	d1.pop_back();
	d1.pop_front();
	printDeque(d1);

	deque<int> d2;
	//单个插入
	d2.insert(d2.begin(), 1);
	//多个插入
	d2.insert(d2.begin(), 2, 5);
	deque<int> d3;
	for (int i = 0; i < 5; i++)
	{
		d3.push_back(i);
	}
	//区间插入
	d2.insert(d2.begin(), d3.begin(), d3.end());
	printDeque(d2);

    //插入初始化列表中的所有元素
	d3.insert(d3.begin(), { 1,2,3,4 });
	printDeque(d3);
    
	//清空容器
	d1.clear();

    //删除元素
	d2.erase(d2.begin());
	d2.erase(d2.begin(), d2.end());
	printDeque(d2);
}

int main()
{
	test1();
	system("pause");
	return 0;
}

在这里插入图片描述

C++ 11 新添加的成员函数

emplace_back():在容器尾部添加一个元素。该函数直接在容器头部构造元素,省去了复制或移动元素的过程。

emplace_front():在容器头部添加一个元素。该函数直接在容器头部构造元素,省去了复制或移动元素的过程。

emplace():在指定的位置直接添加一个元素。emplace() 直接在容器指定位置构造元素,省去了复制或移动元素的过程。

6、deque容器访问元素

at(int idx); //访问容器指定位置处的元素,还可以对其进行修改。并且该函数会自行判定访问位置是否越界。

operator[n] ; //访问容器中的元素,还可以对其进行修改。但需要注意的是,使用此方法时需确保下标 n 的值不会超过容器中存储元素的个数,否则会发生越界访问的错误。

front(); //返回容器中第一个元素

back(); //返回容器中最后一个元素

7、容器内元素排序

sort算法对容器进行排序,默认升序

sort(d.begin(), d.end());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STL常用容器——deque容器的使用 的相关文章

  • 堆中存什么?栈中存什么?

    堆中存的是对象 栈中存的是基本数据类型 和堆中对象的引用 一个对象的大小是不可估计的 xff0c 或者说是可以动态变化的 xff0c 但是在栈中 xff0c 一个对象只对应了一个4btye的引用 xff08 堆栈分离的好处 xff1a xf
  • 计算一个数的N次方

    计算一个数的N次方时 xff0c 我们先设定两个参数n和k xff0c n表示你要输入的数 xff0c k表示这个数的次方 这个时候我们必须对次方数k作出分类 xff1a k 61 0 return 1 其他 xff1a return n
  • 用结构体编写电话通讯录

    用结构体数组编写电话通讯录 xff0c 必须得知道结构体的形式 xff0c 那先把结构体定义回顾一下 xff1a 一般形式为 xff1a xff08 1 xff09 struct 结构体名称 成员表列 数组名 数组长度 如 xff1a st
  • linux(centos)下安装git并上传代码些许步骤(亲自验证过的步骤)

    以前听说了好多次github xff0c 但直到最近才第一次学习使用github来托管自己在linux下的代码 xff01 说实话 xff0c 我自己在使用的时候从网上查了好多教程 xff0c 但总觉得难以掌握 xff08 步骤过于繁琐 x
  • shell具体执行过程及自主实现shell解释器

    在编写shell 解释器之前 xff0c 先来分析几个知识点 xff1a xff08 1 xff09 shell 执行命令时步骤 xff1a xff08 如下图 xff09 xff08 2 xff09 shell 执行脚本时的步骤 xff1
  • Linux下的桥接模式和Nat模式的区别

    先来看一下linux在的桥接模式和Nat模式的差别 xff1a 桥接模式 xff1a Nat模式 xff1a 真正的接触这个问题是因为同学要给我远程传输文件 xff0c 这个时候就调节至桥接模式下 xff0c 进行ping 尽管我们用的是同
  • C知识点整合

    C语言总结 一 语法 1 常见的数据内置类型所占字节 xff08 64 位下 xff09 xff1a char 1 int 4 float 4 long 4 double 8 Longlong 8 2 变量 xff1a xff08 1 xf
  • 判断一棵二叉树是否为完全二叉树

    1 完全二叉树的特点 xff08 来自专业定义 xff09 看到上面完全二叉树的特点 xff0c 我可以将其特点按照自己的 理解归纳为以下几点 xff1a xff08 1 xff1a 若二叉树最下面一层有节点出现 xff0c 那么这个节点一
  • 深入理解JNI技术

    一 JNI是什么 xff1f JNI是Java Native Interface的缩写 xff0c 译为Java本地调用 JNI是一种技术 二 JNI技术的用途 xff1f Java程序中的函数调用Native程序中的函数 Native一般
  • HTTP基本认证(Basic Authentication)

    在浏览网页时候 xff0c 浏览器会弹出一个登录验证的对话框 xff0c 如下图 xff0c 这就是使用HTTP基本认证 1 客户端发送http request 给服务器 服务器验证该用户是否已经登录验证过了 xff0c 如果没有的话 xf
  • 将字符串以单词为单位逆序"I am a Student" 解法

    网上有个题目 xff0c 将字符串以单词为单位逆序 例如 34 I am a Student 34 要变成 34 Student a am I 34 解法大致为 xff1a 先将字符串整体逆序第一个字符和最后一个交换 xff0c 第二个与倒
  • 堆排序查找前N个最大数和二分查找算法

    先了解堆排序概念 堆排序利用了大根堆 xff08 或小根堆 xff09 堆顶记录的关键字最大 xff08 或最小 xff09 这一特征 xff0c 使得在当前无序区中选取最大 xff08 或最小 xff09 关键字的记录变得简单 xff08
  • 构建hash表和两种处理冲突方法

    hash表定义 hashing定义了一种将字符组成的字符串转换为固定长度 xff08 一般是更短长度 xff09 的数值或索引值的方法 xff0c 称为散列法 xff0c 也叫哈希法 由于通过更短的哈希值比用原始值进行数据库搜索更快 xff
  • 用hash_map统计出现次数最多的前N个URL

    海量数据统计频率最高词汇的常规办法之一是先通过一个hash函数处理数据然后取模N xff0c 拆分为N个小文件 xff0c 对每一个小文件进行词频统计和排序处理 xff0c 然后归并N个小文件取频率最大的M个数 下面程序是利用hash ma
  • C++与java语法的异同整理

    文章目录 Java与C 43 43 与基础语法异同java的认知 amp java与C 43 43 的异同C 43 43 中的虚函数和JAVA中的抽象方法区别C 43 43 虚函数与JAVA中抽象函数比较关于接口与抽象类 xff1a Jav
  • 微信公众平台-股票行情查询

    微信公众平台 股票行情查询 php实现的获取上证 xff0c 深证 A B股实时行情的接口 xff0c 只实现了文本消息回复 xff0c K线图可以在图文消息中加上接口url地址就可以显示 xff0c 具体的接口地址网上可以找 xff0c
  • PELCO-D与PELCO-P协议介绍

    一般控制协议都由硬件或软件商编制在程序里面 xff0c 我们只需要通过相关的控制设备来进行操作 但是作为一个从事监控行业的技术人员 xff0c 往往会遇到除了电脑和协议转换器以外根本没有任何控制设备的情况 xff0c 此时 xff0c 协议
  • ROS 问题(topic types do not match、topic datatype/md5sum not match、msg xxx have changed. rerun cmake)

    1 topic types 不匹配 使用 roslaunch 命令 roslaunch carla ros bridge carla ros bridge with example ego vehicle launch 启动官方 demo
  • Ubuntu中查看安装的Python版本以及不同版本之间切换

    查看系统中已安装的所有Python版本 使用 ls 命令来查看你的系统中都有那些 Python 的二进制文件可供使用 xiyou 64 span class token property xiyou virtual machine span
  • Ubuntu Python 多版本安装

    概述 由于 Python 3 有几次较为跳跃的更新 xff0c 导致大量使用 Python 3 作为开发工具的软件会对 Python 3 的版本进行严格限制 xff0c 如限制使用 Python 3 8 Python 3 9 版本 这要求开

随机推荐

  • 怒爬某 Hub 资源就为撸了一个鉴黄平台

    来源 xff1a 码匠笔记公号 黄色已经是我们所不容然而却防不胜防的 xff0c 尤其是对于做内容的工具和平台 xff0c 所以花了30分钟搭建了一个鉴黄平台 xff0c 分享给大家 数据准备 找了 N 多资源都不能解决问题 xff0c 于
  • ROSERROR : datatype/md5sum

    出错原因是 xff1a 自定义消息 xff0c 发送话题的消息类型和接受话题的消息类型不一样 但是我的代码真的是一样的 所以 xff0c 解决办法是 xff1a 清空工作空间的build devel文件夹 xff0c 重新编译运行 成功 x
  • 学习使用 ArUco 标记

    在本文中 xff0c 我们将研究使用 Python 和 OpenCV 检测和估计 ArUco 标记的方向 首先 xff0c 我们将从生成 ArUco 标记开始 你可以使用特定网站一个一个地创建单个标签 xff0c 也可以使用我的程序生成整个
  • TCP协议中的序列号

    TCP 协议工作在OSI的传输层 xff0c 是一种可靠的面向连接的数据流协议 xff0c TCP之所以可靠 xff0c 是因为它保证了传送数据包的顺序 顺序是用一个序列号来保证的 响应包内也包括一个序列号 xff0c 表示接收方准备好这个
  • c++开发过程中遇到的问题及解决方案

    xfeff xfeff 问题一 xff1a 1 gt JForm obj error LNK2019 无法解析的外部符号 34 public virtual thiscall JFC JForm JForm void 34 1JForm 6
  • Digest Auth 摘要认证

    Digest Auth 摘要认证 1 非常规方式 转载 xff1a https blog csdn net qq 25391785 article details 86595529 public static void postMethod
  • 嵌入式C语言基础知识--位操作

    目录 大小端模式 xff1a 字节高低位 xff1a LSB和MSB xff1a 高位先行msb 低位先行lsb xff1a 串口传输是低位先行 IIC传输是高位先行 字节序 比特序 大端模式 小端模式 高字节序 低字节序 MSB LSB
  • qt 绘制 流程图 案例 收集

    参考 C 43 43 中的例子 xff1a Qt Qt5 11 1 Examples Qt 5 11 1 widgets graphicsview diagramscene The Diagram Scene example is an a
  • 获得GPS数据的两种方法 1.读串口

    获得GPS数据一般可通过两种方法 xff0c 读串口及调用gpsapi函数 串口作为硬件设备 xff0c 不能同时被两个程序占用 xff0c gpsapi函数几个应用程序可同时共享端口 1 xff0e 读串口 先找出 gps 使用的串口号
  • 机器人履带底盘的悬挂和传动

    我爸是坦克 xff01 一个履带机器人 一 前言 曾经调研过机器人履带底盘的设计和构造 xff0c 整理一下备忘 本文主要关注自己比较难理解的履带底盘悬挂机构和摇臂式履带底盘传动机构 其中履带底盘的悬挂涉及到克里斯蒂悬挂 xff08 Chr
  • Python爬虫——Scrapy 的基本使用

    文章目录 Python爬虫 Scrapy 的基本使用1 创建 Scrapy 爬虫项目2 Scrapy 创建爬虫文件3 Scrapy 运行爬虫文件 Python爬虫 Scrapy 的基本使用 Scrapy 框架中创建项目 查看配置信息 xff
  • Python爬虫——Scrapy框架使用实例及执行过程

    文章目录 Python爬虫 Scrapy框架使用实例及执行过程1 Scrapy框架使用实例2 Scrapy框架执行过程 Python爬虫 Scrapy框架使用实例及执行过程 1 Scrapy框架使用实例 1 创建scrapy项目 scrap
  • C++基础入门

    文章目录 C 43 43 基础入门1 变量和常量2 关键字3 数据类型4 流程控制5 数组6 函数7 指针8 结构体 C 43 43 基础入门 1 变量和常量 变量和常量 变量 xff1a 数据类型 变量名 61 值 常量 xff1a 宏常
  • 解决CLion的 CMake executable not found:XXX

    解决CLion的 CMake executable not found XXX 问题 CLion不能编译DeepStream项目 xff0c 也不能 build 和 debug了 xff0c 还出现以下提示 xff1a 原因 原因是 cli
  • C++核心编程

    C 43 43 核心编程 1 c 43 43 内存模型 c 43 43 程序执行时将内存大致分为4个区域 代码区 xff1a 存放CPU执行的二进制代码指令 xff0c 由操作系统进行管理全局区 xff1a 存放全局变量和静态变量以及全局常
  • STL技术——STL概述和入门

    文章目录 STL技术 STL概述和入门1 STL简介2 入门案例2 1 vecto存放内置数据类型2 2 vecto存放自定义数据类型2 3 容器嵌套 STL技术 STL概述和入门 1 STL简介 STL介绍 STL xff08 stand
  • 使用keil软件添加.C文件和.H文件到工程

    使用keil软件添加 C文件和 H文件到工程 1 第一步 在所建工程的文件夹下的HARDWARE子文件夹下创建一个所要添加文件名称 xff0c 例如要添加led c和led h文件 xff0c 可以先在HARDWARE文件目录下创建一个命名
  • STL常用容器——String容器的使用

    文章目录 STL常用容器 String容器1 string构造器2 string的赋值操作3 拼接字符串4 字符串查找和替换5 字符串比较6 字符串存取7 字符串插入与删除8 截取字符串 STL常用容器 String容器 string类封装
  • STL常用容器——vector容器的使用

    文章目录 STL常用容器 vector容器的使用1 vector容器概念2 vector容器构造方式3 vector赋值操作4 vector容量 capacity 和大小 size 的区别5 vector添加和删除6 vector数据存取
  • STL常用容器——deque容器的使用

    文章目录 STL常用容器 deque容器的使用1 deque 容器简介2 deque容器的构造函数3 deque的赋值操作4 deque大小操作5 deque容器添加和删除元素6 deque容器访问元素7 容器内元素排序 STL常用容器 d