2017-08-31 120 views
-7

以下語句是否構成2D矢量?矢量陣列是否構成2D矢量?

如果有的話,還要提到矢量的尺寸。是否有另一種方法來聲明全局2D矢量?

陳述:

vector<int> *adj; 
adj = new vector<int>[number_of_nodes]; 

以上陳述已被用於對一個圖形的全局鄰接矩陣的聲明。

看起來這個問題對你們來說並不清楚。我想用向量聲明一個全局鄰接表,這樣我就可以直接使用圖形中的邊來添加邊,如v [a] .push_back(b)。爲此,我必須指定矢量的第一維,同時聲明我沒有執行main之前沒有的矢量。

+2

'std :: vector >'是你在找什麼。 – DeiDei

+0

即使這不是你真正想要的,如果你需要數據是連續的。 – NathanOliver

+0

@DeiDei我知道這一點,但我必須聲明一個鄰接列表的全局向量,以便我可以使用v [a] .push_back(b)。所以我必須在聲明時指定矢量的第一維。 – Aman

回答

2

不,但它給出了類似的行爲。所以你創建的是一個指向矢量數組的指針。所以,你最終會與此:

adj[0] = [] 
adj[1] = [] 
... 
adj[number_nodes] = [] 

,並做了push_back是添加到載體合法的方式:

adj[0].push_back(some_num) --> adj[0] = [some_num] 

但這是解決這個可怕的方式!爲什麼?

  • 您正在使用原始的內存,您將需要管理,並確保您刪除。
  • 您不能在矩陣的第一維上使用任何令人敬畏的std::vector功能。
  • 除非您知道變量number_of_nodes,否則沒有什麼好方法可以計算出矢量的大小。
  • ...一長串,但你明白了。

您已經可以看到std::vector可以用作1D矩陣。因此,使用2個載體:

std::vector<std::vector<int>> Matrix2D; 

如果您需要的初始大小在某些維度,那麼你可以這樣做:

std::vector<std::vector<int>> Matrix2D(number_of_nodes, std::vector<int>()); 

或者這樣:

Matrix2D.resize(number_of_nodes); 

或者如果大小是固定的在編譯時你甚至可以這樣做:

const int number_of_nodes = 10; 
std::array<std::vector<int>, number_of_nodes> Matrix2D; 

或者去額外大,並得到一個圖書館矩陣使用像Eigen.

+1

正是我一直在尋找。宣佈時我不知道尺寸。 Resize()是解決方案。謝謝。 – Aman

+0

還有一件事,在第二個陳述中,我們寫。這不是說我們創建的矢量有權保存整數值而不是其他矢量嗎? – Aman

+0

@Aman,第二個陳述? –