vector reserve与resize区别

vector 的reserve增加了vector的capacity,但是它的size没有改变!而resize改变了vector的capacity同时也增加了它的size!
原因如下:
reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素。加入新的元素时,要调用push_back()/insert()函数。

resize是改变容器的大小,且在创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象。此时再调用push_back()函数,是加在这个新的空间后面的。

  两个函数的参数形式也有区别的,reserve函数之后一个参数,即需要预留的容器的空间;resize函数可以有两个参数,第一个参数是容器新的大小, 第二个参数是要加入容器中的新元素,如果这个参数被省略,那么就调用元素对象的默认构造函数。

 1 #include <vector>
 2  #include<vector>
 3 using namespace std;
 4
 5 int main()
 6 {
 7
 8     vector<int> vector_for_reserve;
 9     vector<int> vector_for_resize;
10
11     vector_for_reserve.reserve(4);
12     vector_for_resize.resize(4);
13
14     //size:0 capacity:4
15     cout << vector_for_reserve.size() << " " << vector_for_reserve.capacity() << endl;
16
17     //size :4 capacity:4
18     cout << vector_for_resize.size() << " " << vector_for_resize.capacity() << endl;
19
20     vector_for_reserve[0] = 1;//错误
21     vector_for_resize[0] = 1;
22
23
24     return 0;
25 }

时间: 2024-10-29 01:09:18

vector reserve与resize区别的相关文章

C++中vector reserve和resize函数

1.reserve 当内存受限时(此时虚拟内存都快耗尽),由于push_back由于每次发现存储空间不够时,默认会申请原来空间的两倍,此时申请空间时就会发生错误.因此如果知道 vector需要多少内存的话,最好先用 reserve申请一下空间 ,即预申请一定的空间. 2.resize 重新设置该容器的大小 <span style="font-size:14px;">// test_max.cpp : 定义控制台应用程序的入口点. #include "stdafx.

vector容器、swap、reserve、resize

vector:动态数组 单口容器,从首位置或中间位置插入元素时,会使得后面的元素位置发生变化,所以一般建议用push_back来从后端追加添加元素.(下右图,deque是双口容易(双端队列)) 容器的基本操作代码如下:(包含了巧用swap收缩空间及reserve预留空间) 1 #define _CRT_SECURE_NO_WARNINGS 2 #include <iostream> 3 #include <cstdlib> 4 #include <vector> //动

转:vector的reserve和resize

vector的reserve和resize vector 的reserve增加了vector的capacity,但是它的size没有改变!而resize改变了vector的capacity同时也增加了它的size! 原因如下:       reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素.加入新的元素时,要调用push_back()/insert()函数. resize是改变容器的大小,且在创建对象,因此,调用这个函数之后,就可以引用容

实战c++中的vector系列--copy set to vector(别混淆了reserve和resize)

stl算法中有个copy函数.我们能够轻松的写出这种代码: #include <iostream> #include <algorithm> #include <vector> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { double darray[10]={1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9}; vector<double> vdoubl

vector中的resize与 reserve

void reserve (size_type n); reserver函数用来给vector预分配存储区大小,即capacity的值 ,但是没有给这段内存进行初始化.reserve 的参数n是推荐预分配内存的大小,实际分配的可能等于或大于这个值,即n大于capacity的值,就会reallocate内存 capacity的值会大于或者等于n .这样,当调用push_back函数使得size 超过原来的默认分配的capacity值时 避免了内存重分配开销. 需要注意的是:reserve 函数分配

【转】java 容器类使用 Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别

原文网址:http://www.360doc.com/content/15/0427/22/1709014_466468021.shtml java 容器类使用 Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别. 经常会看到程序中使用了记录集,常用的有Collection.HashMap.HashSet.ArrayList,因为分不清楚它们之间的关系,所以在使用时经常会混淆,以至于不知道从何下手.在这儿作了一个小例

Java中Vector和ArrayList的区别

首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList.Vector和LinkedList.List用于存放多个元素,能够维护元素的次序,并且允许元素的重复. 3个具体实现类的相关区别如下: ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问.数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中.当从ArrayList的中间位置插入或者删除元素时,需要对数组

vector.resize?与?vector.reserve的区别?.xml

pre{ line-height:1; color:#9f1d66; background-color:#a0ffc0; font-size:16px;}.sysFunc{color:#5d57ff;font-style:italic;font-weight:bold;} .selfFuc{color:#8e0ed3;} .bool{color:#008000;} .condition{color:#008000;font-weight:bold;} .key{color:#440080;} .

std::vector中assign resize reserve的区别

1.assign 用于初始化 2.resize 改变capacity,与size 3.reserve 改变capacity,不改变size 超过size的capacity不可直接访问,可通过push_back追加,若size < capacity, push_back操作不尽心内存分配. 测试代码: #include <stdio.h> #include <iostream> #include <vector> #include <string> vo