首页
学习
活动
专区
工具
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 下面是我们查阅文档所得的资料...: 三.容器在使用含迭代器参数相关函数时的注意点 根据迭代器种类来说:单向是双向的一种特殊情况,双向是随机的一种特殊情况 所以总体迭代器兼容程度是【随机>双向>单向】

15710

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

当开始研究数据科学时,我经常面临一个问题,那就是为我的特定问题选择最合适的算法。在本文中,我将尝试解释一些基本概念,并在不同的任务中使用不同类型的机器学习算法。...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函数解析 区别: 使用上...: list的sort使用更方便lt2.sort();;vector分前后,要找迭代器sort(v.begin(), v.end()); 效率上:在处理少量数据时候,vector的list的sort效率差不多...;处理大量数据,vector要优于list; 【2】vector和list分别的Sort函数使用(代码演示) 说明 下面函数是设置N为数据量,然后分先后记录了vector和list排序一段相同数据所需的时间...最后得出【1】中结论:在处理少量数据时候,vector的list的sort效率差不多;处理大量数据,vector要优于list; void test_op() { srand(time(0));

    20910

    使用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.

    78430

    使用Boost的Serialization库序列化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.5K11

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

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

    1.2K31

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

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

    2.5K50

    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.8K20

    在不影响程序使用的情况下添加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掉即可 ?

    1K10

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

    大家好,我是吴师兄。 众所周知,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

    59120

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

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

    24210

    【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, 获取最后一数据的下一个位置的

    23510

    【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。

    93910

    使用 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.5K00

    【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

    22210

    【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

    22810

    在容器中使用 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.5K10

    来看看栈和队列不为人知的一面

    我想栈和队列的原理大家应该很熟悉了,队列是先进先出,栈是先进后出。 如图所示: ? 那么我这里在列出四个关于栈的问题,大家可以思考一下。...以下是以C++为例,相信使用其他编程语言的同学也对应思考一下,自己使用的编程语言里栈和队列是什么样的。 C++中stack 是容器么? 我们使用的stack是属于那个版本的STL?...栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。...SGI STL中 队列底层实现缺省情况下一样使用deque实现的。...我这里讲的都是C++ 语言中情况, 使用其他语言的同学也要思考栈与队列的底层实现问题, 不要对数据结构的使用浅尝辄止,而要深挖起内部原理,才能夯实基础。

    31410
    领券