c++中capacity和size的区别,以及reserve和resize的区别,shink_to_fit用法
2017-03-20 10:58
531 查看
容器的size是指它已经保存的元素的数量;而capacity则是在不分配新的内存空间的前提下它最多可以保存多少元素;
只有需要的内存空间超过当期容量,reserve才会去调整vector的容量;
如果需求小于等于当前容量,reserve什么也不做;
resize则是直接改变容器大小;
当前resize设置大小如果小于容器的大小,则容器后部的元素会被删除;
如果resize设置大于容器的大小,会将新元素添加到容器后部;
总之,由于该操作不改变元素数量,仅仅影响vector预先分配多大内存空间;
输出结果为
![](http://img.blog.csdn.net/20170321092457657?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHg4NTU1NDY2OTM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
一开始ivec中没有任何元素,插入10个元素后,vecror自动分配的容量是16,;
进行reserve操作,reserve(10)正好等于元素数量,所以预先分配空间不改变;
最后进行resize操作,将vector后5个元素删除了,只保留了前五个元素;
肯定有人要问,不需要vector预先保留空间怎么办?
很简单,c++11贴心的提供了shink_to_fit()来讲capacity减少到和size相同;
最后看图可知capacity和size都为5。
只有需要的内存空间超过当期容量,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++ vector中size/resize和capacity/reserve的区别
- C++学习笔记之——vector的size和capacity、resize和reserve的区别
- C++基础---string类的capacity/max_size/size/length/empty/reserve/resize
- C++的vector中的resize,reserve,size(),capacity()
- C++容器中 size(), capacity, reserve() ,resize() 函数
- vector的reserve和resize以及capacity和size
- STL中容器的几个容易混淆的成员函数-size, capacity, resize, reserve
- vector中的 size和 capacity和 reserve和 resize
- sizeToFit的用法
- C++9.4 vector容器的自增长(size、capacity、reserve)
- C++中resize()和reserve()的区别
- c++ vector中resize、reserve、push_back和capacity
- c++中vector的 resize()和reserve()区别
- C++中string的size,length,capacity三者到底有何区别求解啦?
- vector 在c++中resize 和reserve的区别
- STL中容器的几个容易混淆的成员函数-size, capacity, resize, reserve
- c++ vector resize()和reserve()区别
- C++ STL reserve和resize的区别
- C++中max_size()、size()、capacity()和reserve()函数
- C++之普通成员函数、虚函数以及纯虚函数的区别与用法要点