2011-06-05 83 views
0

我對以下案例有懷疑; 假設我想定義一個矢量矢量到acomadate元素集,我可以添加數據並可以使用這些元素來計算其他東西。那麼我不想要那個矢量了。然後,假設如果我想把另一組數據作爲向量的向量,那麼我可以重新使用先前創建的變量,然後;矢量優化 - 簡單的方法

(1)如果我創建矢量作爲動態存儲器的矢量和刪除,

vector<vector<double> > *myvector = new vector<vecctor<double> >; 
//do push back and use it 

delete myvector; 

,然後再次重新使用

(2)如果我創建矢量的矢量作爲簡單地

vector<vector<double> > myvector; 

//do push back and use it 
myvector.clear(); 

然後再次使用

但是,我猜在這兩種方法很少有內存是重新儘管我們已經刪除了它,所以,我想知道定義矢量矢量的有效方法是什麼。

(3)如果內部矢量的大小始終是2,則是它仍然有效的通過定義

其他vector<vector<double> > myvector(my_list.size(), vector<double>(2))比另一個容器類型使用矢量的 矢量

(4),如果我使用預定義的另一個類保持內部2組的元素,然後把這些對象類型的載體作爲(例如XY是可容納2種元素的類,可以是作爲陣列)

vector<XY>; 

我希望,請人COM告訴我什麼是最有效的方法(從1到4)需要的速度和內存的中間。有沒有更好的方法,請告訴我。感謝

回答

0

如果這是家庭作業(或沒有),你想知道這是更快,那麼你應該嘗試一下:運行「推回和清除「或」新建和刪除「循環幾百萬次並執行。我懷疑2.會快一點。

你說你想容納一組元素,而內部向量的大小是2. 這有點含糊不清,但你可以進一步檢查2件事: 1. std :: pair,if你的「元素」包含2個其他「東西」 2. std :: map,如果你想引用基於另一個「元素」值的「元素」

2

如果你只需要兩個元素的最有效的方法可能是:

std::vector<std::tr1::array<double, 2>> myvector; 
// or std::vector<std::pair<double, double>> myvector; 

// use it 

myvector.clear(); // This will not deallocate any memory, so what has alrdy been allocated will be used for future push_backs 
+0

「std :: array」是C + + 0X/11。 – Xeo 2011-06-05 11:04:16

+0

我會改變它。 – ronag 2011-06-05 11:15:33