C++中vector之size( ) 和 resize( )函数


编程的时候,看到了题目中使用了vector的resize()函数,过来总结一下。

vector函数头文件:#include <vector>

vector函数中有两个函数很容易混淆,一个是size( ) ,另一个是resize();

区别如下:

size( ) : 返回容器的大小;

resize():相当于对容器大小重新规划;

capacity() :返回容器当前能够容纳的元素数量;

size()是分配容器的内存大小,而capacity()只是设置容器容量大小,但并没有真正分配内存。

如下所示代码,解释size( ) 和 resize( )函数的使用情况:

 1 #include <cstdlib>
 2 #include <iostream>
 3 #include <vector>
 4 
 5 using namespace std;
 6 
 7 int main(int argc, char *argv[])
 8 {
 9     vector<int> vi(5);
10     cout << "vi size: " << vi.size() << endl;
11     for (int i = 0; i<5; i++)
12     {
13         vi[i] = i + 1;
14         cout << vi[i] << endl;
15     }
16 
17     vi.resize(3);
18 
19     cout << "vi size: " << vi.size() << endl;
20     cout << "Elements in vi:" << endl;
21     for (int i = 0; i<vi.size(); i++)
22     {
23         cout << vi[i] << endl;
24     }
25 
26     cout << "Press the enter key to continue ...";
27     cin.get();
28     return EXIT_SUCCESS;
29 

 

 程序结果如下:

 

除了上诉两个函数以外,还有reserve()函数:

 reserve():改变当前容器的最大容量(capacity),它不会生成元素,只是确定这个容器允许放入多少对象,如果reserve(len)的值大于当前的capacity(),那么会重新分配一块能存len个对象的空间,然后把之前v.size()个对象通过copy construtor复制过来,销毁之前的内存,如果reserve(len)的值小于当前的capacity(),则不做改变,但是resize 有可能会影响capacity的值 ;

代码如下:

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 int main() {
 5     vector<int> a;
 6     a.reserve(100);
 7     a.resize(50);
 8     cout << a.size() << "  " << a.capacity() << endl; // 50    100
 9     
10     a.resize(150);
11     cout << a.size() << "  " << a.capacity() << endl; //150    150
12 
13     a.reserve(50);
14     cout << a.size() << "  " << a.capacity() << endl; //150    150
15     
16     a.resize(50);
17     cout << a.size() << "  " << a.capacity() << endl; //50     150   
18     return 0;
19 }

运行结果:

 

 

结论:

resize函数重新分配大小,改变容器的大小,并且创建对象

当n小于当前size()值时候,vector首先会减少size()值 保存前n个元素,然后将超出n的元素删除(remove and destroy)

当n大于当前size()值时候,vector会插入相应数量的元素 使得size()值达到n,并对这些元素进行初始化,如果调用上面的第二个resize函数,指定val,vector会用val来初始化这些新插入的元素

当n大于capacity()值的时候,会自动分配重新分配内存存储空间。

 

引用:https://www.cnblogs.com/biyeymyhjob/archive/2013/05/11/3072893.html

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM