首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在哪种情况下我使用特定的STL容器?

在需要高效地访问元素、执行插入和删除操作以及维护元素顺序时,可以使用特定的STL容器。以下是一些常用的STL容器及其特点:

  1. vector:动态数组,支持快速的随机访问和在末尾插入、删除元素。
  2. list:双向链表,支持快速的插入和删除元素,但访问速度较慢。
  3. deque:双端队列,支持快速的在头尾插入和删除元素,以及随机访问。
  4. set/map:红黑树,支持快速的查找、插入和删除操作,但不支持随机访问。
  5. unordered_set/unordered_map:哈希表,支持快速的查找、插入和删除操作,但不支持随机访问。

根据问答内容,您可以选择以下几种STL容器:

  • 如果需要高效地访问元素、执行插入和删除操作以及维护元素顺序,可以使用vector、list、deque等容器。
  • 如果需要快速的查找、插入和删除操作,可以使用set、map、unordered_set或unordered_map等容器。

请注意,这里提到的容器都是C++ STL(标准模板库)中的容器。在选择容器时,请根据您的具体需求和场景进行选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【C++】STL容器——探究不同 种类&STL使用方式(15)

本章主要内容面向接触过C++老铁 主要内容含: 引言: C++系列P15中,我们发现sort函数迭代器参数出现了[RandomAccessIterator]这是什么呢?...让我们继续来探讨吧~ 一.查看STL使用文档时发现"迭代器分为许多种类" 如下文图所示: 二.容器与不同迭代器关系 不难发现,其实迭代器分为许多种类,不同种类迭代器由容器底层结构决定,查阅资料后发现大概能分为以下三类...forward_list/unordered_xxx 双向(bidirectional) list/map/set 随机(random) vector/string/deque 下面是我们查阅文档所得资料...: 三.容器使用含迭代器参数相关函数时注意点 根据迭代器种类来说:单向是双向一种特殊情况,双向是随机一种特殊情况 所以总体迭代器兼容程度是【随机>双向>单向】

15010

不同任务中,应该选择哪种机器学习算法?

当开始研究数据科学时,经常面临一个问题,那就是为特定问题选择最合适算法。本文中,将尝试解释一些基本概念,并在不同任务中使用不同类型机器学习算法。...2.逻辑回归 不要将这些分类算法与标题中使用“回归”回归方法混淆。逻辑回归执行二进制分类,因此标签输出是二进制。...让y成为正确答案:0或1,y_pred是预测答案。根据对数性质,如果y=0,那么总和下第一个加数等于0,并且第二个加数让我们所预测y_pred越接近0。y=1情况下也是类似的。...分类树中,我们使用交叉熵和Gini指数。回归树中,我们最小化了下降区域目标值预测变量和我们分配给它值之间平方误差总和。 ? 我们为每个节点递归地完成这个过程,并在遇到停止条件时完成。...对于我们预先知道维度,递归神经网络(RNNs)包含LSTM或GRU模块,并且可以与数据一起工作。 结论 希望向大家解释最常用机器学习算法,并就如何根据特定问题选择一种算法给出建议。

2K30
  • 【C++】STL容器——探究List与Vector使用sort函数排序区别(14)

    本章主要内容面向接触过C++老铁 主要内容含: 1.Sort函数接口 注意: Compare comp 参数可以决定是【 正序 】还是【 逆序 】 2.Sort函数接口使用(代码演示)...{ cout << e << " "; } cout << endl; } 二、vector和list分别的Sort函数区别 【1】vector和list分别的Sort函数解析 区别: 使用上...: listsort使用更方便lt2.sort();;vector分前后,要找迭代器sort(v.begin(), v.end()); 效率上:处理少量数据时候,vectorlistsort效率差不多...;处理大量数据,vector要优于list; 【2】vector和list分别的Sort函数使用(代码演示) 说明 下面函数是设置N为数据量,然后分先后记录了vector和list排序一段相同数据所需时间...最后得出【1】中结论:处理少量数据时候,vectorlistsort效率差不多;处理大量数据,vector要优于list; void test_op() { srand(time(0));

    19610

    使用STL vector 作为XNAMath快速灵活SIMD数据容器

    简介 这篇文章是关于如何将传统STL vector作为XNAMath类型容器使用....灵活内存管理不管对于游戏还是编辑器常用代码都是一件好事. 像网格顶点这样内存密集性操作, 如: 网格加载, 连接, 断开等, 使用STL vector这样线性容器更加简单和方便....示例说明了怎样定义一个简短类型标识 vec_type.vec_type 就是一个使用了新AAllocator STL vector, 而vector 作为XMFLOAT4容器....不要以为参数是XMFLOAT4A类型, 我们数据容器中是XMFLOAT4类型(XMFLOAT4堆上对齐, 而XMFLOAT4A因为'C2719'错误不能使用)....使用相同函数调用可以直接更新STL容器XMFLOAT4类型 (从SIMD寄存器中). 结果 1st.

    77530

    【C++100问】深度总结STL基本容器使用

    3、容器(Containers) 一个容器就是一些特定类型对象集合,是用来管理某类对象,从C++11标准以来,C++中STL定义几种容器效率非常高,优化非常好,完全没有必要自己去定义类似的数据结构...默认情况下,标准库使用关键字类型 < 运算符来进行比较操作。 无序容器(Unordered associative container),使用 哈希函数 和关键字类型 == 运算符组织元素。...关键字类型元素没有明显序关系情况下,无序容器是非常有用某些应用中,维护元素序代价非常高昂, 此时无序容器也很有用。使用无序容器通常更为简单(通常也会有更好性能) 。...不确定应该使用哪种容器时,可以先只使用 vector 和 list 公共操作:使用迭代器,不使用下标操作,避免随机访问。这样必要时选择 vector 或 list 都很方便。.../unordered_multiset 无序容器关键字类型元素没有明显序关系情况下,无序容器是非常有用

    1.1K31

    使用BoostSerialization库序列化STL标准容器

    使用Boost做对象序列化是非常方便,本文将介绍一种序列化STL标准容器方法。        ...这是之前设计异步框架一个子功能:过程A将标准容器数据序列化成二进制流,然后将该二进制数据发送到过程B,过程B将数据反序列化为标准容器。...= ms_des.end(); it++) { ASSERT_EQ(it->first, i++); } } }         如果STL容器中存放在是一个非标准类型,比如一个用户自定义类型...std::vector > { }; } #endif // STLSERIALIZATION_VECTOR_SERIALIZATION_H         下面代码中,由于TestData是容器承载类型...to_string(i); ASSERT_STREQ(item.str.c_str(), str.c_str()); } } }         最后我们看下包含10000个对象容器反序列化耗时

    2.4K11

    C++STL中map容器说明和使用技巧(杂谈)

    1、map简介 map是一类关联式容器。它特点是增加和删除节点对迭代器影响很小,除了那个操作节点,对其他节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。...3、使用map 使用map得包含map类所在头文件 #include //注意,STL头文件没有扩展名.h map对象是模板类,需要关键字和存储对象两个模板参数: std:map<int,...map中插入元素 改变map中条目非常简单,因为map类已经对[]操作符进行了重载 enumMap[1] = "One"; enumMap[2] = "Two"; ........我们可以使用Find()和Count()方法来发现一个键是否存在。...:       C++ Maps是一种关联式容器,包含“关键字/值”对       begin()          返回指向map头部迭代器       clear()         删除所有元素

    2.5K50

    曾经极端愤怒情况下做不出简单题!

    大家好,是吴师兄。 众所周知,LeetCode 上面的算法题分为三个级别,简单、中等、困难,但有时候明明标注是简单题,但困难程度却不亚于中等题、甚至是困难题。 比如剑指 Offer 29....对于一个二维矩阵来说,它包含了如下边界与打印顺序: 1、顶层,我们可以定义为 top,顶层是按照从左到右顺序进行打印 2、右列,我们可以定义为 right,右列是按照从上到小顺序进行打印 3、...底层,我们可以定义为 bottom,顶层是按照从右到左顺序进行打印 2、左列,我们可以定义为 left,左列是按照从下到上顺序进行打印 在打印过程中,矩阵可打印区间不断发生变化: 每当把从左到右把一行打印完毕之后...// top 表示顶部所在层数位置,一开始第 0 层 int top = 0 ; // bottom 表示底部所在层数位置,一开始第 matrix.length...- 1; // 顺时针打印矩阵过程中,填充 res 数组,从索引位置 0 地方开始填充 int index = 0; // 使用一个 while

    59020

    Lxcfs容器集群中使用

    背景:我们知道k8s pod 内,使用top/free/df等命令,展示状态信息是从/proc目录中相关文件里读取出来,这些文件默认是读取pod所在节点主机对应文件数据。...需求:pod 内执行top/free/df等命令时候,获取到是pod 纬度状态数据,而不是整个宿主机状态。...LXCFS:FUSE filesystem for LXC 是一个常驻服务,它启动以后会在指定目录中自行维护与上面列出/proc目录中文件同名文件,容器从lxcfs维护/proc文件中读取数据时...,得到容器状态数据,而不是整个宿主机状态。...image.png 概述 本文介绍了如何在TKE集群中使用lxcfs admission webhook方案来启用lxcfs支持(Initializers特性K8s 1.14废弃,不再推荐使用原来initializer

    2.7K20

    不影响程序使用情况下添加shellcode

    参考 文章Backdooring PE Files with Shellcode中介绍了一种正常程序中注入shellcode方式,让程序以前逻辑照常能够正常运行,下面复现一下并解决几个小问题。...; return 0; } 编译后exe,可以使用CFF Explorer查看相关信息。...文件前后各插入20-40个字节,以90填充 目标exe中添加一个新代码段,将bin内容导入,并设置可读、可写、可执行、包含代码等属性标志 更新header大小以及重建PE头 使用x32dbg调试...PE头大小是和最终PE头大小是一致,检查第4步操作 每次调试exe时候,基址可能会发生变化,所以复制指令只能用于修改当前调式实例 复制jmp指令机器码时候,注意不要和目标跳转位置太近,会复制成短地址指令...问题3:监听端失联情况下,程序长时间阻塞后程序终止 应该是检查服务端失联情况下直接终止程序了,通过调试找到终止位置nop掉即可 ?

    99710

    【C++】STL容器——list类使用指南(含代码演示)(13)

    本章主要内容面向接触过C++老铁 主要内容含: 一、list 类——基本介绍 list是可以常数范围内在任意位置进行插入和删除序列式容器,并且该容器可以前后双向迭代。...list底层是双向链表结构,双向链表中每个元素存储互不相关独立节点中,节点中通过指针指向 其前一个元素和后一个元素。...与其他序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素执行效率更好。...开销;list还需要一些额外空间,以保存每个节点相关联信息(对于存储类型较小元素大list来说这 可能是一个重要因素) 二、list 类——使用环境准备 使用string类时,必须包含...reverse_iterator,即begin位置 四、list 访问及遍历操作 已合并到【探究 [ 迭代器 ] 种类&STL使用方式】一文中,传送门如下: 额 五、list 增删查改

    22710

    【C++】STL容器——string类使用指南(含代码演示)(8)

    该类接口与常规容器接口基本相同,可以视作常规接口基础上再添加了一些专门用来操作string常规操作。...二、string类——使用环境准备 使用string类时,必须包含#include #include以及 展开命名空间using namespace std; 三、...string类——文档查看 查看所有接口网站:https://cplusplus.com PS:string不属于传统STL容器,它出现早于STL,所以要在Other中才能找到 四、string...【1】容量操作函数总结 函数名称 功能说明 size(重点) 返回字符串有效字符长度 (与length相同,引入size命名区分,是为了与其他容器接口保持一致,一般情况下基本都是用size() length...访问及遍历操作 [代码演示]——迭代器 iterator使用 接口说明 begin +end(重点) 获取第一个数据位置iterator/const_iterator, 获取最后一数据下一个位置

    21910

    【C++】STL容器——vector类使用指南(含代码演示)(11)

    就时间而言,这是一个相对代价高任务,因为每当一个新元素加入到容器时候,vector并不会每次都重新分配大小。...但是无论如何,重新分配都应该是对数增长间隔大小,以至于末尾插入一个元素时候是常数时间复杂度完成。...与其它动态序列容器相比(deque, list and forward_list), vector访问元素时候更加高效,末尾添加和删除元素相对高效。对于其它不在末尾删除和插入操作,效率更低。...二、vector类——使用环境准备 使用string类时,必须包含#include #include以及 展开命名空间using namespace std; 三、...这个问题经常会考察,不要固化认为,vector增容都是2倍,具体增长多少是根据具体需求定义 。vs是PJ版本STL,g++是SGI版本STL

    83810

    【C++】STL容器适配器——stack类使用指南(含代码使用)(17)

    本章主要内容面向接触过C++老铁 主要内容含: 一、stack 类——基本介绍 stack是一种容器适配器,专门用在具有 后进先出 操作上下文环境中,其删除只能从容器 一端 进行元素插入与提取操作...stack是作为容器适配器被实现容器适配器即是对特定类封装作为其底层容器,并提供一组特定成员函数来访问其元素,将特定类作为其底层,元素特定容器尾部(即栈顶)被压入和弹出。...stack底层容器可以是任何标准容器类模板或者一些其他特定容器类,这些容器类应该支持以下操作: (empty:判空操作 back:获取尾部元素操作 push_back:尾部插入元素操作 pop_back...:尾部删除元素操作) 标准容器vector、deque、list均符合上述四种需求,默认情况下,如果没有为stack指定特定底层容器,默认情况下使用deque。...二、stack 类——使用环境准备 使用string类时,必须包含#include #include以及 展开命名空间using namespace std; 三、stack

    20410

    【C++】STL容器适配器——queue类使用指南(含代码使用)(18)

    本章主要内容面向接触过C++老铁 主要内容含: 一、queue 类——基本介绍 队列是一种 容器适配器 ,专门用于FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。...队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定成员函数来访问其元素。元素 从队尾入队列,从队头出队列。...该底层容器应至少支持以下操作: (empty:检测队列是否为空 size:返回队列中有效元素个数 front:返回队头元素引用 back:返回队尾元素引用 push_back:队列尾部入队列 pop_front...默认情况下,如果没有为queue实例化指定容器类,则使用标准容器deque。...二、queue 类——使用环境准备 使用quene类时,必须包含#include #include以及 展开命名空间using namespace std; 三、queue

    20310

    使用 yum update CentOS下更新时保留特定版本软件

    有时需要保留特定版本软件不升级,但升级其他软件,这时就需求用到下面的技巧。当CentOS/RHEL/Fedora下Linux服务器使用 yum update 时命令如何排除选定包呢?...Yum使用/etc/yum/yum.conf或/etc/yum.conf中配置文件。您需要放置exclude指令来定义要更新或安装中排除包列表。这应该是一个空格分隔列表。...允许使用通配符*和?)。 当我使用yum update时,如何排除php和内核包?...打开/etc/yum.conf文件,输入: vi /etc/yum.conf [main]部分下面添加以下行,输入: exclude=php* kernel* 最后,它应如下所示: [ main ]...-exclude 命令行选项 最后,您可以使用以下语法命令行上跳过yum命令更新: 注意:上述语法将按名称排除特定包,或者从所有存储库更新中排除。

    2.4K00

    Linux中不破坏磁盘情况下使用dd命令

    你已插入了空驱动器(理想情况下容量与/dev/sda系统一样大)。...本文中,if=对应你想要恢复镜像,of=对应你想要写入镜像目标驱动器: # dd if=sdadisk.img of=/dev/sdb 还可以一个命令中同时执行创建操作和复制操作。...如果它是你创建启动驱动器,将它插入到计算机,看看是否正常启动。如果它是普通数据分区,挂载它以确保文件存在且可以正常访问。 用dd擦除磁盘 多年前,有个朋友为其政府负责海外大使馆安保工作。...他曾告诉,他监管每个大使馆都配有政府发放一把锤子。为什么?万一大使馆遇到什么危险,可以使用这把锤子砸烂所有硬盘。 那为什么不删除数据呢?你不是开玩笑吧?...然而,你可以使用dd让不法分子极难搞到你旧数据。

    7.6K42

    容器使用 Java 资源分配准则

    这与默认情况下只能使用 1GB 内存不同。在这种情况下,50% 基本上是非常安全,也许也是最佳,因为还有许多可用内存实际利用率都不高。...大部分情况下默认值 25% 对于内存管理来说是比较安全。这个设置对内存来说可能并不是最有效,但是内存是相对廉价,同时相比于 JVM 进程未知情况下被 OOM-kill,还是谨慎一些比较好。...当然,这还是主要取决于容器内存大小。不推荐设置成 75%,除非容器至少有 512MB 内存(最好是 1GB),同时需要对应用程序实际内存使用非常了解。...如果容器内除了 Java 进程之外还有其他进程,那么调整这些值时候需要额外注意。容器内存由其中所有进程共享,因此在这种情况下,了解整个容器内存使用会更加复杂。...大多数情况下,JVM 默认行为已经很好了。如果你发现自己正试图解决一个晦涩内存问题,那么可能需要研究一下 JVM 内存这个深奥领域。其他情况,尽可能避免直接去修改。

    1.5K00

    不确定列号情况下如何使用Vlookup查找

    最近小伙伴收集放假前排班数据 但是收上来数据乱七八糟 长下面这样 但是老板们只想看排班率 所以我们最终做表应该是这样 需要计算出排班率 排班率=排班人数/总人数 合计之外每一个单元格...都需要引用 除了最基础等于=引用 我们还有一种更加万能Vlookup+Match方法 这样无论日期怎么变化 无论日期顺序是否能对上 我们都不用更改公式 例如A部门,2月1日排班率应该这么写 =...B17 单元格为排班率日期 A2:K2 单元格为我们排班人数日期 M2:N8单元格是总人数 其中 分子排班人数公式是 VLOOKUP($A18,$A$1:$K$8,MATCH(B$17...,$A$2:$K$2,0),0) 排班人数里面的日期匹配 我们用Match函数动态确定列号 MATCH(B$17,$A$2:$K$2,0) 分母总人数比较简单 就是常规Vlookup VLOOKUP...部门合计我们需要确定部门行号即可 为防止部门变动 最好也用公式确定行号 这一块 可以有两种写法 一种是用Sum,Offset,Index,Match函数组合 =SUM(OFFSET(INDEX

    2.4K10
    领券