容器中resize和reserve的区别

来源:互联网 发布:华为直播软件安装 编辑:程序博客网 时间:2024/05/17 04:18

初始化vector<int>  va(10,100).

va.resize(5):则只取前5个数,删除向量的后5位数,va.size()=5!

va.resize(20):前10位保持值不变,后10位创建对象并初始化为0,va.size()=20!


va.reserve(5):未改变,va.size()=10,va.capability()=10;

va.reserve(20):未改变,va.size()=10,va.capability()=20.

reserve的作用是预留空间,不会创建对象,他得作用会在如下情况体现。

例如,假定你想建立一个容纳1-1000值的vector<int>。没有使用reserve,你可以像这样来做:vector<int> v;for (int i = 1; i <= 1000; ++i) v.push_back(i);在大多数STL实现中,这段代码在循环过程中将会导致2到10次重新分配。(10这个数没什么奇怪的。记住vector在重新分配发生时一般把容量翻倍,而1000约等于210。)把代码改为使用reserve,我们得到这个:vector<int> v;v.reserve(1000);for (int i = 1; i <= 1000; ++i) v.push_back(i);这在循环中不会发生重新分配。