不,但它給出了類似的行爲。所以你創建的是一個指向矢量數組的指針。所以,你最終會與此:
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.
'std :: vector>'是你在找什麼。 –
DeiDei
即使這不是你真正想要的,如果你需要數據是連續的。 – NathanOliver
@DeiDei我知道這一點,但我必須聲明一個鄰接列表的全局向量,以便我可以使用v [a] .push_back(b)。所以我必須在聲明時指定矢量的第一維。 – Aman