C++中resize函数和reserve函数
函数原型:void resize (size_type n);void resize (size_type n, const value_type& val);第一个参数是将容器的元素变成n个,第二个参数是将这n个元素变成val(没有就是默认值)注意:resize不适用于array如果当前大小大于所要求的大小,容器后部的元素会被删除;如果当前大小小于新大小,会将新元素添加到容器后部。个人
·
函数原型:
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 1048 int 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以下吧,答案讲道理不对。
更多推荐
已为社区贡献1条内容
所有评论(0)