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的更多相关文章

  1. STL - 容器 - Deque

    Deque和Vector类似,只不过deque头尾都开放,能够在头尾进行快速插入和删除操作 DequeTest.cpp #include <iostream> #include <d ...

  2. 带你深入理解STL之Deque容器

    在介绍STL的deque的容器之前,我们先来总结一下vector和list的优缺点.vector在内存中是分配一段连续的内存空间进行存储,其迭代器采用原生指针即可,因此其支持随机访问和存储,支持下标操 ...

  3. STL容器 vector,list,deque 性能比较

    C++的STL模板库中提供了3种容器类:vector,list,deque对于这三种容器,在觉得好用的同时,经常会让我们困惑应该选择哪一种来实现我们的逻辑.在少量数据操作的程序中随便哪一种用起来感觉差 ...

  4. [转]STL之deque容器详解

    Deque 容器 deque容器是C++标准模版库(STL,Standard Template Library)中的部分内容.deque容器类与vector类似,支持随机访问和快速插入删除,它在容器中 ...

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

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

  6. STL容器删除元素的陷阱

    今天看Scott Meyers大师的stl的用法,看到了我前段时间犯的一个错误,发现我写的代码和他提到错误代码几乎一模一样,有关stl容器删除元素的问题,错误的代码如下:std::vector< ...

  7. STL容器迭代器失效分析

    连续内存序列容器(vector, string, deque) 对于连续内存序列STL容器,例如vector,string,deque,删除当前iterator会使得后面所有的iterator都失效, ...

  8. STL容器的适用情况

     转自http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/ ly; mso-default-props:yes; m ...

  9. STL容器的遍历删除

    STL容器的遍历删除 今天在对截包程序的HashTable中加入计时机制时,碰到这个问题.对hash_map中的每个项加入时间后,用查询函数遍历hash_map,以删除掉那些在表存留时间比某个阈值长的 ...

  10. STL容器与配接器

    STL容器包括顺序容器.关联容器.无序关联容器 STL配接器包括容器配接器.函数配接器 顺序容器: vector                             行为类似于数组,但可以根据要求 ...

随机推荐

  1. docker安装oracle数据

    docker安装oracle数据库 1️⃣ 通过docker拉取并启动oracle11g(此版本目前主流),docker换源及安装mysql看Springboot创建项目及测试 - $YX$ - 博客 ...

  2. Hbase简单介绍

    一.背景介绍 我们生活在一个互联网的时代,这个时代的特点是,无论任何事情,只要我们想知道,都可以通过互联网迅速的检索到问题的答案,并且答案是有用的,并非常切合我们的需要. 因此,很多公司都开始致力于提 ...

  3. ABC 311 A - E

    ABC 311 A - E 不提供代码 A 题意:求一个字符串的第一个 ABC 最早出现的位置,可以打乱顺序,可以间隔 建立三个变量,然后以此判断即可,直到三种字符都出现就可以了 B 题意:给定每个人 ...

  4. Oracle查询存在外键约束但未创建对应索引的情况

    1.Oracle提供的脚本 2.网络搜索到的脚本 3.改为可以指定用户的脚本 4.测试脚本使用 1.Oracle提供的脚本 如果要求管控严格,可以考虑使用Oracle官方提供的脚本. Script t ...

  5. Adoquery.Refresh 慎用。。。。非常严重,会带来各种问题。

    adoquery.refresh 各种问题,根本启不到刷新的作用.完全不刷新的节奏. 修改成已经打印后,如果用adoquery.refresh的话,这两个订单 并不会被刷新掉,惨吧......

  6. JS leetcode 两数之和 II - 输入有序数组 题解分析

    壹 ❀ 引 我在JS leetcode 两数之和 解答思路分析一文中首次解决两数之和等于目标值的问题,那么今天遇到的是两数之和的升级版,题目为leetcode167. 两数之和 II - 输入有序数组 ...

  7. Apache log4j2远程代码执行漏洞

    漏洞描述 Apache Log4j2是一个基于Java的日志记录工具.该工具重写了Log4j框架,并且引入了大量丰富的特性.该日志框架被大量用于业务系统开发,用来记录日志信息.大多数情况下,开发者可能 ...

  8. Github 使用PAT(Personal Access Token)后的命令行登录

    在Github上启用PAT 命令行下使用git push不能再直接使用用户名密码, 在输入密码的地方需要使用PAT来代替. 具体的创建步骤为 https://docs.github.com/en/gi ...

  9. SpringBoot+Shiro+LayUI权限管理系统项目-4.实现部门管理

    1.说明 只讲解关键部分,详细看源码,文章下方捐赠或QQ联系捐赠获取. 2.功能展示 3.业务模型 @Data @EqualsAndHashCode(callSuper = false) @Acces ...

  10. 为什么华为今年疯狂招od?

    不知道的大家有没有发现 这两年市场不好公司用人需求紧缩 唯有华子疯狂招人 很多人都听过华为OD 但是具体是什么还是有很多人疑惑 总结以下三个部分: 1.为啥疯狂招od而不是之前的纯"外包&q ...