編程的時候,看到了題目中使用了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