您的位置:首页 > 编程语言 > C语言/C++

c++中capacity和size的区别,以及reserve和resize的区别,shink_to_fit用法

2017-03-20 10:58 531 查看
容器的size是指它已经保存的元素的数量;而capacity则是在不分配新的内存空间的前提下它最多可以保存多少元素;

只有需要的内存空间超过当期容量,reserve才会去调整vector的容量;

如果需求小于等于当前容量,reserve什么也不做;

resize则是直接改变容器大小;

当前resize设置大小如果小于容器的大小,则容器后部的元素会被删除;

如果resize设置大于容器的大小,会将新元素添加到容器后部;

总之,由于该操作不改变元素数量,仅仅影响vector预先分配多大内存空间;

<vector>
using std::vector;
int main(int argc,char** argv)
{
vector<int>  ivec;
for(int i=0;i<10;++i)
ivec.push_back(i);
std::cout<<"ivec::capacity="<<ivec.capacity()<<std::endl;
std::cout<<"ivec::size="<<ivec.size()<<std::endl;

ivec.reserve(10);
std::cout<<"ivec::capacity="<<ivec.capacity()<<std::endl;
std::cout<<"ivec::size="<<ivec.size()<<std::endl;

ivec.resize(5);
std::cout<<"ivec::capacity="<<ivec.capacity()<<std::endl;
std::cout<<"ivec::size="<<ivec.size()<<std::endl;

ivec.shrink_to_fit();
std::cout<<"ivec::capacity="<<ivec.capacity()<<std::endl;
std::cout<<"ivec::size="<<ivec.size()<<std::endl;
return 0;
}


输出结果为



一开始ivec中没有任何元素,插入10个元素后,vecror自动分配的容量是16,;

进行reserve操作,reserve(10)正好等于元素数量,所以预先分配空间不改变;

最后进行resize操作,将vector后5个元素删除了,只保留了前五个元素;

肯定有人要问,不需要vector预先保留空间怎么办?

很简单,c++11贴心的提供了shink_to_fit()来讲capacity减少到和size相同;

最后看图可知capacity和size都为5。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 容器操作