在STL中基本容器有: string、vector、list、deque、set、map
set 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问
set:集合, 用来判断某一个元素是不是在一个组里面,使用的比较少
map:映射,相当于字典,把一个值映射成另一个值,如果想创建字典的话使用它好了
string、vector、list、deque、set 是有序容器
1.string
string 是basic_string<char> 的实现,在内存中是连续存放的.为了提高效率,都会有保留内存,如string s= "abcd",这时s使用的空间可能就是255, 当string再次往s里面添加内容时不会再次分配内存.直到内容>255时才会再次申请内存,因此提高了它的性能.
当内容>255时,string会先分配一个新内存,然后再把内容复制过去,再复制先前的内容.
对string的操作,如果是添加到最后时,一般不需要分配内存,所以性能最快;
如果是对中间或是开始部分操作,如往那里添加元素或是删除元素,或是代替元素,这时需要进行内存复制,性能会降低.
如果删除元素,string一般不会释放它已经分配的内存,为了是下次使用时可以更高效.
由于string会有预保留内存,所以如果大量使用的话,会有内存浪费,这点需要考虑.还有就是删除元素时不释放过多的内存,这也要考虑.
string中内存是在堆中分配的,所以串的长度可以很大,而char[]是在栈中分配的,长度受到可使用的最大栈长度限制.
如果对知道要使用的字符串的最大长度,那么可以使用普通的char[],实现而不必使用string.
string用在串长度不可知的情况或是变化很大的情况.
如果string已经经历了多次添加删除,现在的尺寸比最大的尺寸要小很多,想减少string使用的大小,可以使用:
string s = "abcdefg";
string y(s); // 因为再次分配内存时,y只会分配与s中内容大一点的内存,所以浪费不会很大
s.swap(y); // 减少s使用的内存
如果内存够多的话就不用考虑这个了
capacity是查看现在使用内存的函数
大家可以试试看string分配一个一串后的capacity返回值,还有其它操作后的返回值
2.vector
vector就是动态数组.它也是在堆中分配内存,元素连续存放,有保留内存,如果减少大小后内存也不会释放.如果新值>当前大小时才会再分配内存
对最后元素操作最快(在后面添加删除最快 ), 此时一般不需要移动内存,只有保留内存不够时才需要
对中间和开始处进行添加删除元素操作需要移动内存,如果你的元素是结构或是类,那么移动的同时还会进行构造和析构操作,所以性能不高(最好将结构或类的指针放入vector中,而不是结构或类本身,这样可以避免移动时的构造与析构)。
访问方面,对任何元素的访问都是O(1),也就是是常数的,所以vector常用来保存需要经常进行随机访问的内容,并且不需要经常对中间元素进行添加删除操作.
相比较可以看到vector的属性与string差不多,同样可以使用capacity看当前保留的内存,使用swap来减少它使用的内存.
总结
需要经常随机访问请用vector
3.list
list就是链表,元素也是在堆中存放,每个元素都是放在一块内存中
list没有空间预留习惯,所以每分配一个元素都会从内存中分配,每删除一个元素都会释放它占用的内存,这与上面不同,可要看好了
list在哪里添加删除元素性能都很高,不需要移动内存,当然也不需要对每个元素都进行构造与析构了,所以常用来做随机操作容器.
但是访问list里面的元素时就开始和最后访问最快
访问其它元素都是O(n) ,所以如果需要经常随机访问的话,还是使用其它的好
总结
如果你喜欢经常添加删除大对象的话,那么请使用list
要保存的对象不大,构造与析构操作不复杂,那么可以使用vector代替
list<指针>完全是性能最低的做法,这种情况下还是使用vector<指针>好,因为指针没有构造与析构,也不占用很大内存
4.deque
双端队列,也是在堆中保存内容的.它的保存形式如下:
[堆1]
...
[堆2]
...
[堆3]
每个堆保存好几个元素,然后堆和堆之间有指针指向,看起来像是list和vector的结合品,不过确实也是如此
deque可以让你在前面快速地添加删除元素,或是在后面快速地添加删除元素,然后还可以有比较高的随机访问速度
vector是可以快速地在最后添加删除元素,并可以快速地访问任意元素
list是可以快速地在所有地方添加删除元素,但是只能快速地访问最开始与最后的元素
deque在开始和最后添加元素都一样快,并提供了随机访问方法,像vector一样使用[]访问任意元素,但是随机访问速度比不上vector快,因为它要内部处理堆跳转
deque也有保留空间.另外,由于deque不要求连续空间,所以可以保存的元素比vector更大,这点也要注意一下.还有就是在前面和后面添加元素时都不需要移动其它块的元素,所以性能也很高
相关推荐
c++:STL容器及其接口(string、vector、deque、stack、queue、list、set/multiset、map/multimap)
STL(Standard Template Library,标准模板库) 目录 一、STL 六大组件简介 二、 string容器 2.1 string容器基本概念 2.2string 构造函数 2.3string基本赋值操作 2.4string存取字符操作 2.5string拼接操作 2.6string查找和替换 2.7 string比较操作 2.8string子...
C++ STL基本容器比较
摘自:http://blog.chinaunix.net/u2/75321/showart_1144742.html在STL中基本容器有: string、vector、list、deque、set、mapset 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问set:集合, 用来判断某一个元素是不是在一个组里面,使用的比较少map:映射,相当于字典,把一个值映射成另一
别在找提高C++晦涩难懂的知识了。提高效率!这里有C++STL——全面总结详细教程(附案例解析)(持续更新中)
不知道什么时候发生的一个现象,大多数人刚开始学语言,听到C和C++给人的感觉就不好! 磊磊写了篇关于C++的见解:让迷茫的彼此,有所寄托~~~ 想专一就选C++!!! https://blog.csdn.net/cfl997/article/details/103511869 C++提高编程(模板概念内容都在这篇博客中)——(一名负责整合学习的搬运工) 主要包含: 模板(类模板与函数模...
C++中vector当作字典来用的典型例子
leetcode 题目:Longest Substring Without Repeating Charactersint lengthOfLongestSubstring(string s) { vector<int> dict(256, -1); int maxLen = 0, start = -1; for (int i = 0; i !...
playwright-mcp 安装使用的详细教程
Playwright MCP 快速入门指南 Playwright MCP Server 是由微软开发的浏览器自动化服务,通过 MCP 协议为 AI/Agent/LLM 提供网页交互能力。它基于可访问性树而非屏幕截图,支持多种浏览器和运行模式。 安装要求: Node.js v18+ 命令行操作能力 支持 MCP 的客户端 安装方式: 通过 npx 快速启动:npx @playwright/mcp@latest 项目依赖安装:npm install @playwright/mcp 主要特性: 支持 Chrome
PRPD图谱分析从入门到精通:5种典型放电模式的识别手册
本文详细解析PRPD图谱分析技术,重点介绍电晕放电、悬浮放电等5种典型放电模式的识别方法。通过37组真实案例对比,提供关键识别区和诊断流程图模板,帮助工程师快速掌握变电站设备状态监测的核心技能,提升绝缘缺陷诊断准确率。
C++ 容器汇总(未完,待续)
1. Vector Vector实际是动态数组,在堆中分配,元素连续存放,如果插入新值大于当前分配大小时,会重新分配内存。 由于vector内存空间连续,所以在中间插入或删除会造成内存块的拷贝,因此不适用于经常对中间位置元素进行添加或删除的情景;最好在vector中保存结构或者类的指针,这样可以避免是移动是产生的构造与析构的开销; 2. Map Map是关联容器,以键值对的形式
[RK3568][Android11.0]Vold-DiskInfo:区分u盘和硬盘
测试平台 Platform: RK3568 OS: Android 11.0 需求描述 目前系统内部设备没有对硬盘(sata/usb移动硬盘)和u盘做区分,统一显示的为usb存储设备.目前有需求要在显示上有所区分。 解决方案 如何区分移动硬盘和U盘,见Android usb设备的检测及区分(sata硬盘、优盘及移动硬盘).主要就是检测removeable值,为0:硬盘,为1:u盘 解决补丁如下 From 572cf35c07f68c5cb5defe40c536dd9ad1b4648e Mon Sep 17
【C++】STL相关容器的对比
目录 一、序列容器(vector、list、deque) 1、vector(向量容器) 2、list(链表容器) 3、deque(双端队列容器) 二、关联容器(set、multiset、map、 multimap) 1、set(集合)/multiset(多重集合) 2、map(映射)/multimap(多重映射) 3、unordered_set(无序集合)/unordered_multiset (无序多重集合) unordered_map( 无序映射)/unordered_...
coredump文件的原理是啥
Core Dump(核心转储)是操作系统在程序崩溃(如段错误、非法指令等)时自动生成的一个文件,它包含了程序崩溃瞬间的。通过 core dump,开发者可以像“时间回溯”一样检查程序崩溃瞬间的状态,是调试复杂问题的利器!终止时,Linux 内核会生成 core 文件。不会生成 core dump,因为它们是“优雅终止”信号。这样 core 文件会直接压缩存储,节省磁盘空间。的文件(类似可执行文件),可以用。Core 文件本质上是一个。
使用 Python 构建 Reddit 热帖爬虫:抓取热门讨论帖和评论
在现代互联网中,Reddit 被誉为全球最大、最活跃的讨论平台之一,汇聚了各种主题的帖子、评论和社交互动。因此,抓取 Reddit 上的热门帖子和评论可以为我们提供一个丰富的文本数据源,可以用于情感分析、话题建模、趋势分析等应用。Reddit 提供了官方的 API,可以让开发者获取包括帖子、评论、用户信息等在内的各种数据。我们可以结合上述方法,抓取多个热门帖子,并将每个帖子的标题、作者、发布时间和评论内容保存到一个数据结构中。每个帖子的对象包含了丰富的信息,如标题、内容、发布时间、作者等。
[转]C++ STL基本容器string,vector,list,deque,map
在STL中基本容器有: string、vector、list、deque、set、map set 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问 set:集合, 用来判断某一个元素是不是在一个组里面,使用的比较少 map:映射,相当于字典,把一个值映射成另一个值,如果想创建字典的话使用它好了 string、vector、list、deque、set 是有序容器 ...
【75】OpenCV C++实战篇——OpenCV 图像拼接、全景拼接(教程合集)
本文整理了OpenCV实现图像拼接的技术教程合集,涵盖C++和Python两种语言实现方案。图像拼接技术旨在将多张重叠图像融合为无缝全景图,既扩大视角又保持高分辨率。内容包含水平矫正等关键步骤(附对比效果图),提供多个实战案例的完整代码和详细讲解,涉及单应性矩阵、图像变换等核心技术。不同案例展示了从两张到多张图像的拼接效果,适合不同层次的学习者参考实践。
C++ STL常用标准库容器入门(vector,map,set,string,list...)
其中几种种序列容器类型 C++ STL中最基本以及最常用的类或容器无非就是以下几个: string vector deque list forward_list queue priority_queue stack string 对比在C语言中一般怎么使用字符串的 char* s1 = "Hello JackYu!"; //创建指针指向字符串常量,既然是常量字符串,这段字符...
OPENSSL使用方法
预备知识KEY 通常指私钥。CSR 是 Certificate Signing Request 的缩写,即证书签名请求,这不是证书,只是包含申请证书的基本信息。生成证书时要把这个提交给权威的证书颁发机构,颁发机构审核通过之后,再根据这些申请信息生成相应的证书。CRT 即 certificate的缩写,即证书。 X.509 是一种证书格式。对X.509证书来说,认证者总是CA或由CA指定的人,一份...
免杀思路总结
免杀思路总结 1.免杀技术简介 1.免杀的重要性 2.免杀的难度 3.杀毒软件的排行 国外 国内 1 、Bitdefender 1、360 2 、Norton 360 2、智量安全(没测过,据说很厉害) 3 、Kaspersky 3、火绒安全 4 、Webroot 4、金山独霸 5 、Trend Micro 5
C++ STL常见容器
1.vector(数组) 1.1 介绍 vector为可变长数组(动态数组),定义的vector数组可以随时添加数值和删除元素。 头文件 #include < vector > 初始化: //初始化 //方式一:初始化一维可变长数组 vector<int>num; //定义了一个名为num的存int数据的一维数组 vector<double>num;//定义了一个名为num的存double数据的一维数组 vector<node>num;//no
pscad IEEE标准系统搭建说明
pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。
C++常见容器一网打尽
整理了C++STL中常见的容器及其常见的操作,为日常编程提供了方便。
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
Data-Structures-and-Algorithm-Analysis-in-Java.pdf
作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...
C++常用的容器:vector、string、deque、stack、queue、list、set、map、hash_set、hash_map等的介绍
本文详细介绍了vector、string、deque、stack、queue、list、set、map以及pair对组的基本语法。
老版QQ原生表情gif动态
这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。
C++ STL常用容器:string、vector、deque、stack、queue、list、set/multiset、map/multimap
文章目录1 string容器1.1 string基本概念1.2 string构造函数1.3 字符串长度【size()、length()、strlen()】1.4 string赋值操作【operator=、assign()】1.5 string字符串拼接【operator+=、append()】1.6 string查找【find()、rfind()】和替换【replace()】1.7 string字符串比较【compare()】1.8 string字符存取【operator[]、at()】1.9 string
C++ STL之容器介绍(vector、list、set、map)
STL(Standard Template Library)即标准模板库。STL通过使用模板实现了容器和算法的分离,允许程序员编写与类型无关的代码,这正是泛型编程的核心思想。
c++_STL容器总结
vector是一个单端动态的数组v.begin():获取容器的起始迭代器(指向第0个元素)v.end():获取容器的结束迭代器(指向最后一个元素的下一个位置)还记得之前说的一个容器对应一个迭代器吗?比如这里vector::iterator是vector这个容器的迭代器;通过vector::iterator it = v.begin()这样的方式获得可以把迭代器看做指针但不要单纯的认为它是指针一旦遇到复杂的迭代器 it -> name可能不识别,因此推荐用(*it).name。
STL容器详解(C++)
C++中的STL容器详解,详细说明容器的底层原理、数据结构以及常用方法。
【刷题】刷题常用STL函数整理合集
本文归纳总结刷题常用到STL容器以及一些标准算法,主要包括: part1.序列容器 string vector queue deque stack part2.关联容器 set map unordered_map 以及这些容器的常用操作: 如插入、删除、查找、访问方式(迭代器or下标,C++11关键字auto了解吗?顺序访问or随机访问)、初始化等。 一、序列容器 常用容器: vector、d...
C++STL:容器Vector ,string ,map,set,list,queue,deque
C++ STL中最基本以及最常用的类或容器无非就是以下几个: string vector set list map queue deque 一、Vector :可变数组容器 #include<vector> Vector<int> vec; vec.push_back(1);//在尾部插入数字1 vec.pop_back();//删除最后一个元素 c...
C++ STL常用容器
C++标准模板库(STL)是C++编程中不可或缺的部分,它提供了丰富的数据结构和算法。本文将带你初识C++ STL,包括容器(如vector、list、map等)、算法(如排序、查找、遍历等)以及迭代器等内容。我们将对每种容器和算法进行简要介绍,并给出示例代码加深理解。通过本文的阅读,读者将能够初步掌握C++ STL的基本用法,为日后的程序设计打下坚实的基础。
1798



被折叠的 条评论
为什么被折叠?



