2015-06-26 66 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 –