2013-04-17 19 views
1

如何動態地將內存分配給Vector?如何動態地分配內存到Vector <Point>?

vector<Point> vInPts; //我的輸入向量 - 我已經傾倒值(大小6)一些

//否則對所述輸入向量指向一些計算

vector<Point> vOutPts; //如何動態該輸出分配內存矢量點

+2

您可以使用'vOutPts.reserve()'。這將分配內存而不實際向矢量填充值。或'vOutPts.resize()',它將分配空間並用默認初始化的元素填充它。那是你需要的嗎? – jogojapan

回答

4

可能你並不需要分配動態地引導自己。在內部,向量將分配它需要的內存來動態地存儲它的元素,並且會負責管理這個內存。因此,只要申報載體在自動存儲:

vector<Point> vOutPts; 

可以通過調用std::vector::reserve分配的存儲器,用於載體中的預定量。

如果您絕對必須動態分配矢量,請確保您知道所有關於內存管理的內容,並且在smart pointersRAII上閱讀。

0

這樣

vector <Point> *myvect= new vector<Point>() 

但是不要忘記調用:

delete myvect 

當你完成使用它,否則你會創建一個泄漏。

請注意,分配載體本身這種方式會不會一樣分配dinamically矢量內容。只有例如您打算在函數內部創建一個矢量並通過引用返回它時,才應該完成矢量本身的動態分配。自動內存管理更容易處理,不容易出錯而且最安全的不是動態分配對象......因此,只要你沒有,你應該避免這種動態分配

+2

這是對這個問題的一種可能的解釋,但非常糟糕的建議。 –

+0

爲什麼? – Mppl

+1

因爲它非常不尋常(我懷疑設計缺陷)想要動態分配'vector'對象本身。它用於自動管理動態內存,並增加一個額外的手動分配層來達到這個目的。 –

2

如果你知道你想要的大小,那麼你就可以分配與初始化足夠的元素:

vOutPts.resize(size); 

,或者你可以用大小創建:

vector<Point> vOutPts(size); 

否則,你可以成長一次向量一個元素:

vOutPts.push_back(some_point); 

如果你知道(大致)有多少元素你想膿h,那麼你可以通過事先分配一些內存來提高效率,而不用初始化任何元素:

vOutPts.reserve(approx_size);