![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++stl容器
优秀的邓宗磊
这是一个优秀的人呢
展开
-
c++,stl,set容器常用的API,构造,赋值,查看大小,插入删除
c++,stl,set容器常用的API,构造,赋值,查看大小,插入删除set容器的特点:1、自动排序,可定义排序函数。2、支持iterator,begin到end是已经排好序的数据3、关联式容器,但不区分键和值,或者理解为键值一体4、支持使用pair<set<>::iterator,bool>对象判断插入是否成功以及常用API:构造:赋值:查看大小插入删除:查找:返回两个迭代器的函数,需要使用pair<set<>::iterat原创 2022-02-02 12:55:14 · 455 阅读 · 0 评论 -
c++,stl容器,疑难未解问题:容器的sort排序算法传入的排序规则必须是<,>,而不能是<=,>=,否则运行报错,注意规避
c++,stl容器,疑难未解问题:容器的sort排序算法传入的排序规则只能是<,>,而不能是<=,>=,否则运行报错问题:vector容器中,传入给sort排序函数的判断中如果是<=,>=这种,就会在运行时报错,并且是在sort运行中间报的错,暂时原因未知。规避:传给sort的判断函数中使用<,>这种不带=的判断。报错截图:规避:...原创 2022-01-29 16:54:17 · 512 阅读 · 0 评论 -
c++,stl容器调用clear清除数据出现假删除,需要使用swap交换方法以释放容器内存容量
c++,stl容器调用clear清除数据出现假删除,需要使用swap交换方法以释放容器内存容量1、场景:使用stl容器,例如vector时,想要清除其原有数据时,一般会直接调用其clear函数,但这样没有将容器内存删除干净。2、问题:容器中的数据没了,容器中的内存还在,也就是clear可以清除数据使容器size变成0,但不会是容器容量capacity变成0.3、例子:清除了,没全清除。调用clear前,容器size为16,容量为19调用clear后,容器size为0,数据成功被清除,但容原创 2022-01-23 22:10:27 · 1559 阅读 · 0 评论 -
c++,stl,map容器,构造,元素插入,遍历,修改键值时的注意点
c++,stl,map容器,构造,元素插入,修改,遍历map容器是相当常用的stl容器,它的元素插入有四种方法,基于insert的三种和下标赋值一种,同时map本身的性质就是没有重复键,所以会出现插入失败的情况,map容器本身也提供了键入结果检测的方法。元素类型:map中的元素是成对出现的,其每个元素都是一个键和其对应的值组合成的pair型数据,搜索时使用find拥有和下标访问相同的时间复杂度。构造:首先构造一个map,<>中前面一个是键,后面一个是值,map中不能插入相同键的数据元素原创 2021-12-19 18:46:10 · 1842 阅读 · 0 评论 -
c++,stl,map容器常用的API,构造,赋值,查看大小,插入删除
map容器API图片截图自互联网,黑马yyds构造:赋值:大小:插入:删除:同时,map也支持迭代器遍历,map中需要注意的是map的插入操作,这个将在其他的博客中讲。原创 2021-12-19 17:58:20 · 543 阅读 · 0 评论 -
c++,stl,容器析构时,无用数据对象处理,变成未初始化内存,指针对象需挨个delete并置空,复杂对象需调用特定函数,容器析构时释放所有内存
c++,stl,容器抛出数据对象,使其变成未初始化内存,指针对象需要手动挨个delete并置空,复杂对象则还需要调用特定函数c++容器中一般存放类对象和指针,以此可以区分为对象容器和指针容器。此处的容器还是拿vector为例。一、当容器中存放的是对象数据时:vector< Obj >vector调用pop_back函数去除数据的操作,就是调用这个对象的析构函数,将这个类析构掉,只剩下内存空间,size减一。当该vector生命周期结束后或者手动销毁时,其中的对象数据会一一调用析构函数原创 2021-12-19 16:27:40 · 1161 阅读 · 0 评论 -
c++,stl,线性容器vector,string,reserve函数数值扩容,避免容器自动扩容带来性能消耗,自动扩容导致拷贝构造函数频繁被调用
c++,stl,线性容器vector,string,reserve函数数值扩容,避免容器自动扩容带来性能消耗,自动扩容导致拷贝构造函数频繁被调用前提:线性容器vector在拷贝构造数据时导致数据量size值扩大,size值扩大到等于capacity时,容器为了使capacity变大就会扩容。问题:1、线性容器以vector为例,2、每次扩大capacity时,容器就需要重新在堆中申请一块更大的内存,3、然后将源容器中的值一个个拷贝构造到新容器中,4、如果扩大的capacity不够,比如一次pu原创 2021-12-19 15:41:50 · 783 阅读 · 0 评论 -
c++,stl,线性容器vector,string,容量capacity只大不小,占用太多内存的解决方法,拷贝构造函数配合swap函数交换容器,释放多的容量内存
c++,stl,线性容器vector,string,容量capacity只大不小,占用太多内存的解决方法,拷贝构造函数配合swap函数交换容器,释放多的容量内存在线性容器vector中,容量只会增大不会减小,这导致vector容器会一直占用其“数据量最大值”时的内存,造成了内存资源的浪费。问题:线性容器vector容量只增不减带来内存浪费。解决方式,初级:1、通过vector容器的拷贝构造函数,以一个需要被缩容的容器为数据,拷贝构造一个新容器。2、被拷贝构造出的vector容器的容量capaci原创 2021-12-19 15:11:57 · 786 阅读 · 0 评论 -
c++,stl,线性容器vector,string中,容量,数据,capacity多于size的部分,只分配了内存,未被初始化,只用了malloc,未调用构造函数
c++,stl,线性容器vector,string中,容量,数据,capacity多于size的部分只分配了内存,未被初始化,只用了malloc,未调用构造函数之前讲过,线性容器中的容量会保持大于等于数据量,现在细讲容量和数据。容量:1、容器为了放置数据而申请的内存,容器保持一个大于等于数据量的值capacity,2、容器用这个值与容纳的数据的size相乘,得出需要从堆中申请的内存大小,3、容器从堆中申请得出值的内存,数据:1、容器准备好了容量后,通过函数接受到了数据,通过push_back或原创 2021-12-19 13:51:11 · 527 阅读 · 0 评论 -
c++,stl,vector API,构造,赋值,大小操作,数据访问,赋值,插入删除
c++,stl,vector API,构造,赋值,大小操作,数据访问,赋值,插入删除黑马yyds构造:赋值:大小操作数据访问,赋值插入删除注意点:原创 2021-12-19 13:20:03 · 205 阅读 · 0 评论 -
c++,stl,string容器的API,构造,赋值,访问,拼接,查找替换
stl,string容器的API,构造,赋值,访问,拼接,查找替换构造:赋值:访问:图片截图自互联网拼接查找替换比较截取子串插入删除原创 2021-12-19 12:51:43 · 309 阅读 · 0 评论 -
c++,stl,线性容器vector,string的size,capacity,push_back,reserve,resize函数的作用和相互影响
c++,stl,容器的size,capacity,push_back,reserve函数的作用以非常常见的容器vector为例:.size()函数的作用是:返回当前容器中程序员给容器的数据个数。特点:紧跟着程序员操作带来的的数据量改变而改变。例如程序员定义了一个vector,然后push_back了5个数字进去,此时这个容器的size()返回值就是5,且size是从0开始,每push_back一次,size值紧跟着加一的。程序员再push_back进去4个数,这个容器的size()返回值就是5原创 2021-12-15 21:00:57 · 1824 阅读 · 0 评论 -
c++,stl,string容器和vector<unsigned char>容器数据的相互转换
vector容器转换为string容器直接上代码,代码每一行都有注释,保证看得懂://这个方法使用字符指针,先申请内存并初始化,后挨个赋值//不使用string += 运算符的原因是避免string的线性存储结构导致多次内存变动引起不可控错误//不使用string.reverse()方法然后使用下标一一赋值的原因,是string只支持下表访问,不支持下标赋值,//这个方法使用字符指针,先申请内存并初始化,后挨个赋值//不使用string += 运算符的原因是避免string的线性存储结构导致多次原创 2021-12-12 17:51:17 · 1694 阅读 · 0 评论