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