2010-12-13 65 views
15

有人可以給我一個如何爲向量分配內存的例子嗎?我需要幾條線。 我有一個發生在20〜30個元素的向量..但是當我嘗試清點,並編譯它,我只得到了第一對夫婦的條目..爲一個向量分配內存

+2

你有任何代碼,你能說明什麼?你的問題的最後一行真的讓我困惑 – Default 2010-12-13 10:15:49

+2

是的,這聽起來像你在你的代碼中犯了一個錯誤。你可能不應該手動保留空間 – Oystein 2010-12-13 10:27:06

回答

38

std::vector管理它自己的內存。您可以使用reserve()resize()方法有它分配足夠的內存,以適應項目一定量:

std::vector<int> vec1; 
vec1.reserve(30); // Allocate space for 30 items, but vec1 is still empty. 

std::vector<int> vec2; 
vec2.resize(30); // Allocate space for 30 items, and vec2 now contains 30 items. 
+1

來完成這篇文章,'resize()'添加使用默認構造函數構造的元素(即,如果類型是'Elem',然後'Elem()') – swegi 2010-12-13 11:08:17

+1

@swegi,默認,是的。 'resize()'也可以接受第二個參數,它將被複制到所有新元素中。 – 2010-12-13 11:14:14

+1

但是,如果您只是使用'.push_back()',您是否必須重新分配/調整大小? – Charles 2015-12-10 14:29:04

7

看看this 您使用list.reserve (N);

Vector處理它的內存,你根本不需要使用reserve()。如果您已經知道向量列表需要多大,它纔會真正提高性能。

例如:

std::vector<int> v; 
v.reserve(110); // Not required, but improves initial loading performance 

// Fill it with data 
for(int n=0;n < 100; n++) 
    v.push_back(n); 

// Display the data 
std::vector<int>::iterator it; 
for(it = v.begin(); it != v.end(); ++it) 
    cout << *it;