vector的reserve和resize以及capacity和size

1.capacity

指容器在不分配新的存储空间的前提下它最多可以保存多少元素。

2. size

指当前容器已经保存的元素的数目。

在弄清这两个概念以后,很容易懂resize和reserve的区别

vector 的reserve增加了vector的capacity,但是它的size没有改变!而resize改变了vector的capacity同时也增加了它的size!

原因如下:

reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素。加入新的元素时,要调用push_back()/insert()函数。

c.reserve(n)指分配至少能容纳n个元素的内存空间。

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

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

例子1:

vector<int> myVec;

myVec.reserve( 100 );     // 新元素还没有构造,

// 此时不能用[]访问元素

for (int i = 0; i < 100; i++ )

{

myVec.push_back( i ); //新元素这时才构造

}

myVec.resize( 102 );      // 用元素的默认构造函数构造了两个新的元素

myVec[100] = 1;           //直接操作新元素

myVec[101] = 2;

例子2:

#include <vector>

#include <iostream>

using namespace std;

int main(int argc, char* argv[])

{

vector<int> vect;

vect.push_back(1);

vect.push_back(2);

vect.push_back(3);

vect.push_back(4);

vect.reserve(100);

cout<<vect.size()<<endl;  //size为4,但是capacity为100

int i = 0;

for (i = 0; i < 104; i++)

{

cout<<vect[i]<<endl;

}

return 0;

}

例子3:

#include <vector>

#include <iostream>

using namespace std;

int main(int argc, char* argv[])

{

vector<int> vect;

vect.push_back(1);

vect.push_back(2);

vect.push_back(3);

vect.push_back(4);

vect.resize(100);    //新的空间不覆盖原有四个元素占有的空间,现在size和capacity都是100

cout<<vect.size()<<endl;

int i = 0;

for (i = 0; i < 104; i++)

{

cout<<vect[i]<<endl;

}

return 0;

}

例子4:

#include <vector>

#include <iostream>

using namespace std;

int main(int argc, char* argv[])

{

vector<int> vect;

vect.resize(100);    //分配100个空间

vect.push_back(1);

vect.push_back(2);

vect.push_back(3);

vect.push_back(4);

cout<<vect.size()<<endl; //现在size和capacity都是104

int i = 0;

for (i = 0; i < 104; i++)

{

cout<<vect[i]<<endl;

}

return 0;

}

从上面例子可以看出,不管是调用resize还是reserve,二者对容器原有的元素都没有影响。

时间: 2024-10-09 07:03:21

vector的reserve和resize以及capacity和size的相关文章

转:vector的reserve和resize

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

C++ vector的reserve和resize详解

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

实战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 reserve与resize区别

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

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> //动

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

vector API详细学习

vector是一种顺序容器. 构造函数: vector(); vector( const vector& c ); vector( size_type num, const TYPE& val = TYPE() ); vector( input_iterator start, input_iterator end ); 例子: #include <iostream> #include <vector> using namespace std; int main()

STL学习:STL库vector、string、set、map用法

常用方法 vector 1.可随机访问,可在尾部插入元素:2.内存自动管理:3.头文件#include <vector> 1.创建vector对象 一维: (1) vector<int>v1; (2) vector<int>v2(10);//10个元素,初始为0 (3) vector<int>v3(10,4);//10个元素,初始为4 (4) vector<int>v4(v3);//拷贝 (5) vector<int>v5=v4;//