2015-06-26 67 views
1

所以我期待基本上是一個雙數組,但它通過向量動態。不過,我想我不完全理解這一點,因爲我做錯了什麼導致我的向量下標超出範圍。這裏是我的代碼:雙向矢量問題在c + +

std::vector<std::vector<std::string>> m_menuList; 
m_menuList[0].push_back(menuType); 
m_menuList[0].push_back(location); 

這可能是一個愚蠢的錯誤或完全錯誤的東西,它確實編譯,只是總是崩潰。

謝謝!

回答

5

我們傾向於稱爲「雙向量」二維向量。然後,一個「三重矢量」將是一個三維矢量等等......它們中的大部分都可以稱爲多維矢量。

你的問題是,外部矢量是空的,所以沒有m_menuList[0]。你可以做,而不是:

m_menuList.push_back(std::vector<std::string>(1, menuType)); 

這將推動其僅由menuTypem_menuList背面的載體。

你也可以開始m_menuList了與一定數量的空載體,以便當前的代碼將工作的(假設你有一些整數n):

std::vector<std::vector<std::string>> m_menuList(n); 
+0

沒關係啊,我還以爲2D向量意味着像某些類型的圖形矢量的! (臉紅)......感謝您的幫助! –

2

你必須初始化後resize()您的載體訪問之前它使用索引。

std::vector<std::vector<std::string>> m_menuList; 
m_menuList.resize(1); 

但是,當你插入的對象,你不需要索引,你可以做如下:

m_menuList.push_back(menuType); 
m_menuList.push_back(location); 

OR 

std::vector<std::vector<std::string>> m_menuList; 
m_menuList.push_back(menuType); 
m_menuList.push_back(location); 
+0

啊好吧!非常感謝你! :d –