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

C++】STL 标准模板库 ① ( STL 简介 | STL 基本概念 | STL 主要内容 )

一、STL 简介 1、STL 概念 C++ 语言 的 STL " 标准模板库 " 英文全称 " Standard Template Library " , STL 一套强大的 C++ 库 , 其中包含了各种通用的...数据结构和算法 , 如 : 向量、列表、队列、排序等 ; STL C++ 标准的一部分 , 所有的 C++ 编译器 都应该支持该标准 ; 2、STL 主要内容 STL 的主要内容 : 容器 : 存储数据的类..., 不同之处 双端队列可以 序列头部 插入和删除 操作 , 具有常量时间复杂度 ; 表 list : 对任意元素的访问与对两端的距离成正比,但对某个位置上插入和删除一个项的花费为常数时间 集合 set...: 元素不能重复的集合 ; 多重集合 multiset : 元素可以重复的集合 ; 映射 map : 存放键值对 , 一个键对应一个 ; 多重映射 multimap : 存放键值对 , 一个键对应多个..., 可以顺序访问容器的每个元素 , 而不改变容器中元素的位置 ; 常量时间复杂度 指的是执行某个操作 , 所花费的时间与输入规模无关 , 通常为 O(1) ; 二、STL 代码示例 在下面的代码

16430

从零开始学C++之STL(一):STL六大组件简介

(二)、什么STL 1、STL(Standard Template Library),即标准模板库,一个高效的C++程序库。...不同的:set的元素不像map那样可以同时拥有实(value)和键值(key),set元素同时拥有实键值,且实就是键值键值就是实,而map的所有元素都是pair,同时拥有实(value)...不同的,hash_set同set一样,同时拥有实键值,且实就是键值键值就是实,而hash_mapmap一样,每一个元素同时拥有一个实(value)和一个键值(key),所以其使用方式,和上面的...这个allocator一个由两级分配器构成的内存管理器,申请的内存大小大于128byte,就启动第一级分配器通过malloc直接向系统的堆空间分配,如果申请的内存大小小于128byte,就启动第二级分配器...当然,这里的一个问题,内存池带来一些内存的浪费,比如只需分配一个小对象,为了这个小对象可能要申请一大块的内存池,但这个浪费还是值得的,况且这种情况实际应用也并不多见。

1.3K00
您找到你想要的搜索结果了吗?
是的
没有找到

C++】STL的基本用法

STL概念 C++的STL标准模板库的缩写。...使用 cin >> myVector[i]; ,由于 myVector 一个空的向量,尝试访问 myVector[i] 可能导致未定义的行为。...STL容器之map ✨3.1 map C++的STL(标准模板库)map 一种关联式容器,用于存储键-对。它按照键的顺序进行排序,并且具有快速查找功能。...3.3 map的简化版源码示例 map C++ 标准库提供的关联容器,它实际上一个基于红黑树的有序关联容器,用于存储键值对,并能够按键的排序顺序进行访问。...STL容器之set ✨4.1 set setC++标准模板库[STL]的一个关联容器,它提供了一种有序的、不重复的集合。set使用红黑树实现,这使得它的插入、删除和查找操作都具有较好的性能。

11110

C++标准库:使用STL提供的数据结构和算法

C++标准库:使用STL提供的数据结构和算法C++标准模板库(Standard Template Library,STL)C++标准的一个重要组成部分。...映射(Map):键值对的集合,根据键快速查找对应的。队列(Queue):先进先出(FIFO)的数据结构。栈(Stack):后进先出(LIFO)的数据结构。...迭代器(Iterators)迭代器STL处理容器元素的重要工具。迭代器,遍历容器,并访问或操作容器的元素。...使用STL的容器和算法,更加高效地进行数据存储、操作和处理。熟练掌握STL的使用方法,对于C++编程来说是非常重要的。 谈到实际应用场景,STL的容器和算法各个领域发挥作用。...谈到实际的C++标准库应用场景,文件操作一个常见的示例。

28420

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

3、容器(Containers) 一个容器就是一些特定类型对象的集合,用来管理某类对象的,从C++11标准以来,C++STL定义的几种容器的效率非常高,优化的非常好,完全没有必要自己去定义类似的数据结构...与 vector 类似,随机访问快,不过两端插入和删除快,但在中间插入和删除慢。 优缺点: 优点:支持随机访问,即 [] 操作和 .at(),查询效率高;向两端,插入或删除元素,插入效率高。...处理输入数据,可以先向 vector 追加数据,再调用标准库的 sort 函数重排元素,从而避免中间位置添加元素。 如果必须在中间位置插入元素,可以输入阶段使用 list。...输入完成后将 list 的内容拷贝到 vector 。 不确定应该使用哪种容器,可以先只使用 vector 和 list 的公共操作:使用迭代器,不使用下标操作,避免随机访问。...)和多重映射(multimap) map(映射):由红黑树实现,其中每个元素都是一些 键值对(key-value):关键字起索引作用,表示与索引相关联的数据。

1K31

【Example】C++ 标准库常用容器全面概述

当你以局部变量形式创建并初始化 vector ,对象本身存储于栈内存当中,但是它所存储的元素却是堆内存当中连续的一块空间,因此 std::vector 对于随机访问效率非常高。...STL 所内置的关联式容器主要使用红黑树来实现,容器内自动根据 Key 来自动升序排序。 此外还有基于哈希的无序关联式容器,请照猫画虎使用即可。...最坏情况下,所有元素位于一个存储桶,操作数量与序列的元素数量成比例(线性时间)。 插入元素不会使任何 iterator 无效,删除元素只会使指向已删除元素的 iterator 失效。...Map 与 set 不同的map 系列键值对应的形式,即 Key : Value 成对出现。基于红黑树的 map 根据键的大小自动升序排序,基于哈希表的则无序。...最坏情况下,所有元素位于一个存储桶,操作数量与序列的元素数量成比例(线性时间)。 此外,插入元素不会使迭代器失效,移除元素仅会使指向已移除元素的迭代器失效。

3.2K30

C++】STL 标准模板库 ② ( STL 标准模板库组成 | STL 十三个头文件 | STL 六大组件 | STL 容器存放基础数据类型 | STL 容器存放类对象 | 容器存放对象指针 )

通过 迭代器 进行关联的 ; 所有的 C++ 程序都会使用到 STL 标准模板库 , 使用 STL 提供的容器更加快速地开发程序代码 ; STL 标准模板库 的 头文件 内置了 各种常用的 存储数据的模板类...用于遍历 STL 容器 的元素 ; : 向量 , 本质数组 , 内存空间连续 ; : 链表 , 一个双向链表 , 内存不连续 ; : 映射 , 由键值对组成...迭代器 // 使用迭代器遍历容器 // 访问 vector 容器可以通过数组方式, 也可以通过迭代器方式 // 迭代器 一个指向 容器 元素的指针 // 初始状态 : 将 vector 容器其实地址赋值给迭代器...迭代器 // 使用迭代器遍历容器 // 访问 vector 容器可以通过数组方式, 也可以通过迭代器方式 // 迭代器 一个指向 容器 元素的指针 // 初始状态 : 将 vector 容器其实地址赋值给迭代器...容器 // 声明 vector 向量容器 vector v; // 向容器添加元素, 相当于将 指针地址 拷贝到容器 // 指针地址 就是 三个对象的内存首地址

37430

List Set Map比较

于是使用迭代器遍历Set,结果按元素插入的次序显示。...看看get()要做哪些事,就会明白为什么ArrayList搜索“键”相当慢的。而这正是HashMap提高速度的地方。...HashMap使用了特殊的,称为“散列码”(hash code),来取代对键的缓慢搜索。“散列码”“相对唯一”用以代表对象的int,它是通过将该对象的某些信息进行转换而生成的。...Map : 维护“键值对”的关联性,使你可以通过“键”查找“” HashMap : Map基于散列表的实现。插入和查询“键值对”的开销固定的。...而在迭代访问发而更快,因为它使用链表维护内部次序。 TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”,它们会被排序(次序由Comparabel或Comparator决定)。

1.1K40

C++ STL 概述_严丝合缝的合作者

初识 STL 什么STL? STL(Standard Template Library) C++以模板形式提供的一套标准库,提供了很多通用性的功能模块。...添加数据,如果容量不够,容器自动分配新的内存。 容器可以迭代。 支持数据类型参数(泛型编程)。 2.1 分类 STL的容器众多,有点乱入花丛渐迷眼的既视感。...一般按照存储方式对其进行分类: 序列式容器:数据以添加的顺序进行存储,当然可以对数据排序。 关联式容器:数据由键和两部分组成。...使用哈希表:对键值进行哈希算法,然后根据哈希把数据存储不同的单元。 STL中常用的关联容器: set:集合。包含头文件 。 map:映射。包含头文件。...有更复杂的查找需求,可以使用STL算法相应的函数模板进行查询,例如find,find_if,find_end和find_first_of。

46220

C++进阶:详细讲解容器set与map(pair、multiset、multimap)

2.C++键值对——pair C++键值一种数据结构,通常用于表示关联关系 键值对由两部分组成:键(Key)和(Value)。...这种结构允许通过键来检索和关联对应的,key代表键值,value表示与key对应的信息 2.1pair定义 std::pair C++标准库中提供的一个简单的键值对实现。...map通过键值访问单个元素的速度通常比unordered_map容器慢,但map允许根据顺序对元素进行直接迭代(即对map的元素进行迭代,可以得到一个有序的序列)。...5.3.4 [] 读取元素:使用 [] 运算符 如果指定的键存在于 map ,则返回与该键关联的 如果不存在,则会插入一个新的键值对,键为指定的键,为默认构造的对应类型的默认,并返回该默认的引用...插入元素:使用 [] 运算符向 map 插入元素 如果指定的键不存在,则会创建一个新的键值对,键为指定的键,为指定的,并返回该的引用 如果键已经存在,则直接返回对应的的引用。

16210

「转自 InfoQ」Rust:一个不再有 CC++ 的,实现安全实时软件的未来

C 里数组,C++ 里可能向量程序试图寻找第 -1 个元素,什么都有可能发生:或许是每次搜索的结果都不同,让你意识不到这里存在问题。...C++ 的所有权 C++11 发布之后得到了极大的提升,但是它也为向后兼容性问题付出了不小的代价。对于作者来说,C++ 的所有权非常多余,以前简单的分类被吊打。...之后 map 函数就会需求一个可以重复调用并且处于可变状态的可调用函数,这就是为什么编译器失败的原因。...这一段代码显示了 Rust 类型系统与 C++ 相比有多么强大,同时也体现了在当编译器跟踪对象生命周期的语言中编程多么不同。 示例的错误信息里提到了特质(trait)。...官方安装包自带 Cargo,它好用到让人遗憾为什么 C/C++ 没有类似的工具。 ? 我们难道都要转向 Rust 吗?

1.2K20

c++ stl容器_c++ std是什么

C++中常用的std标准容器 从c++11标准以来,c++std定义的几种容器的效率非常高,优化的非常好,完全没有必要自己去定义类似的数据结构。...string的访问子字符串: str.substr(_pos, n)  //该函数可以获得原字符串的部分字符, 从pos开始的n个字符,_pos超过范围抛出out_of_range的异常。...因此,通过key来访问mapmap不能const类型。...: map插入不存在的元素(指key不同),可以插入成功,插入一个已经存在key的pair对象,ma不会作任何改变。...3. set容器: set容器与map容器的唯一区别在于:存放的元素类型不同: map存储的键-对,即pair类型,而set只存放键值

60910

CC++常见面试知识点总结附面试真题—-20220326更新

c,int fun() 解读为返回为int(即使前面没有int,也是如此,但是c++如果没有返回类型将报错),输入类型和个数没有限制, 而int fun(void)则限制输入类型为一个void...C++程序调用被C编译器编译后的函数,为什么要加extern“C”?...标准从堆上分配很多内存来完成这次拷贝。...问题堆空间不足,应用可能释放一些内存,然后再进行尝试。 参考:为什么适配器stack成员函数top()和pop()需要分离实现 3. map 和 unordered_map 的区别?...log(n) map的元素按照二叉搜索树(又名二叉查找树、二叉排序树,特点就是左子树上所有节点的键值都小于根节点的键值,右子树所有节点的键值都大于根节点的键值)存储的,使用序遍历可将键值按照从小到大遍历出来

1.4K10

STL容器分类「建议收藏」

容器里面的对象必须同一类型,该类型必须可拷贝构造和可赋值的,包括内置的基本数据类型和带有公用拷贝构造函数和赋值操作符的类。典型的容器有队列、链表和向量等。 标准C++,容器一般用模版类来表示。...标准C++的STL框架的容器主要有两大类: l 序列容器(sequence container顺序容器)—— 将一组具有相同类型T的对象,以严格的线性形式组织在一起。...STL的序列容器有3种: n vector(向量)——提供对变长序列的快速随机访问 (即对第i个元素的访问时间,与i无关的常量),对序列末尾的插入和删除操作的时间分摊常量;(...map类,定义头文件); n multimap(多重映射)—— 支持可重复Key类型的键值,并提供对另一个基于键的类型T的快速检索;例如map<string...有关string的更详细内容,会在本节后面的4.3)中介绍; n valarray(数组)—— 为数值计算而进行了优化的向量,并不是一个具有通用性的容器。

67710

Rust常见集合

向量(vector) vector 的数据类型为Vec,它允许我们一个单独的数据结构中储存多于一个的,它在内存彼此相邻地排列所有的。 vector 只能储存相同类型的。...[1, 2, 3]; 【注】向量的结尾增加新元素没有足够空间将所有所有元素依次相邻存放的情况下,可能会要求分配新内存并将老的元素拷贝到新的空间中。...使用 [] 方法索引溢出,Rust panic;使用 get 方法索引溢出,Rust 不会 panic,相应地,其返回为 None 。...Rust 标准还包含一系列其他字符串类型,比如 OsString、OsStr、CString 和 CStr。 【主】本文主要讨论的标准库提供的 String 字符串。...只键没有对应插入:哈希表有一个特有的 API,叫做 entry,它获取我们想要检查的键作为参数。entry 函数的返回一个枚举 Entry,它代表了可能存在也可能不存在的

78010

深入理解STL库_STL文件格式的工作原理

删除容器中一个元素后,待迭代器所指向的元素已经被删除,也造成迭代器失效。erase()方法会返回下一个有效的迭代器,所以当我们要删除某个元素,需要it=vec.erase(it);。...list中进行插入时不会导致list的迭代器失效的,只有删除才会失效,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响。...(2)增删改查 增: 使用函数push_front(); 头插 使用函数push_back(); 尾插 使用函数insert(); position位置插入为val的元素 删: 使用函数pop_front...所有元素都会根据元素的键值自动被排序。map的所有元素都是pair,同时拥有实value和键值key。pair的第一个元素被视为键值,第二个元素被视为实。...map不允许俩各元素拥有相同的键值,由于红黑树一种平衡二叉搜索树,自动排序的效果很不错,所以标准库STLmap都是以红黑树为层级制。

51710

你们要的C++面试题答案来了--基础篇

子类继承了父类的时候也继承其虚函数表,子类重写父类虚函数时候,会将其继承到的虚函数表的地址替换为重新写的函数地址。使用了虚函数,增加访问内存开销,降低效率。...其原因是因为map和set根据关键字排序来保证其有序性的,如果允许修改key的话,那么首先需要删除该键,然后调节平衡,再插入修改后的键值,调节平衡,如此一来,严重破坏了map和set的结构,导致iterator...,const_map不能用,只希望确定某一个关键值是否存在而不希望插入元素也不应该使用,mapped_type类型没有默认也不应该使用。...其中申请内存小于128K,会使用系统函数brk堆区中分配;而申请内存大于128K,会使用系统函数mmap映射区分配。 请你说一说C++的内存管理怎样的?...即未初始化的全局变量编译器初始化为0 动态区域: heap(堆):进程未调用malloc没有堆段的,只有调用malloc采用分配一个堆,并且程序运行过程可以动态增加堆大小(移动break指针

2.8K30

java集合详解完整版(超详细)「建议收藏」

实际使用,如果更新图不需要保持图中元素的顺序,就使用HashMap,如果需要保持图中元素的插入顺序或者访问顺序,就使用LinkedHashMap,如果需要使图按照键值排序,就使用TreeMap。...Map(用Key来搜索的专家): 使用键值对存储。Map维护与Key有关联的。两个Key可以引用相同的对象,但Key不能重复,典型的KeyString类型,但也可以是任何对象。...LinkedHashSet迭代访问Set的全部元素,性能比HashSet好,但是插入时性能稍微逊色于HashSet。...我们用的最多的HashMap,HashMap里面存入的键值取出的时候随机的,Map 插入、删除和定位元素,HashMap 最好的选择。 TreeMap取出来的排序后的键值对。...一个线程访问同步方法,其他线程也访问同步方法,可能进入阻塞或轮询状态,如使用 put 添加元素,另一个线程不能使用 put 添加元素,也不能使用 get,竞争越来越激烈效率越低。

79020
领券