C++中resize函数和reserve函数

来源:互联网 发布:聚合数据接口 编辑:程序博客网 时间:2024/06/04 19:35
函数原型:
void resize (size_type n);

void resize (size_type n, const value_type& val);

第一个参数是将容器的元素变成n个,第二个参数是将这n个元素变成val(没有就是默认值)

注意:resize不适用于array

如果当前大小大于所要求的大小,容器后部的元素会被删除;如果当前大小小于新大小,会将新元素添加到容器后部。

个人理解:resize只改变容器的元素,它是不会将容器的容量变小,只有当n大于容器的容量时,它才会改变容器大小(加大容量)。

网上有些博客说直接改变容器容量,我感觉完全就是在误导人啊,当然也可能是我理解错误,如果有老哥觉得我错了,欢迎评论。

函数原型:

void reserve (size_type n);
reserve操作允许我们通知容器它应该准备保存多少元素,reserve并不改变容器中元素的数量,它仅影响容器预先分配多大内存空间。

注意:reserve只适用于vector和string


下面是《C++ prime》上的一个课后习题源码:

#include<iostream>#include<vector>using namespace std;#define temp  1048int main(void){vector<string> svec;svec.reserve(1024);for(int i=0;i<temp;i++)svec.push_back("a");cout<<"svec.capacity "<<temp<<" 1:"<<svec.capacity()<<endl;svec.resize(svec.size()+svec.size()/2);cout<<"svec.capacity "<<temp<<" 2:"<<svec.capacity()<<endl;return 0;}


配套的答案书上是这样说的:



可能是编译器的原因,我的是gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609,编译结果是:


但是resize是不可能减少容器的容量的,容量不可能减少到1024以下吧,答案讲道理不对。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小茹和小黄犬的故事 小茹与兽专辑第一部分 小茹和小狗小白的故事 小茹和牧羊犬的故事 小茹被健身房教练玩晕 小茹和流浪狗 小草 小草app 小草影视 小草简笔画 小草福利 小草下载 我是棵小草 小草图片 小草客户端 小草地址 小草怎么画 小草影院 小草app2019 小草歌词 小草画 小草apk 小草apk下载 肥肥的小草 小草宅男 李小草 小草诗句 小草简谱 小草吉他谱 三水小草 小草像什么 小草图 小草在线 小草网 小草歌谱 歌曲小草 小草 歌曲 小草儿歌 什么的小草 小草的诗 小草歌曲