2014-09-22 120 views
-4

如何在C++中使用二维矢量。 我写了下面的代码,但它不工作。我得到运行时错误。C++中的二维矢量

vector<vector<int> >itemsets; 
int main() 
{ 
    itemsets.push_back(vector<int>()); 
    itemsets[0].push_back(1); 
    itemsets[1].push_back(2); 
    cout<<itemsets[0][0]<<itemsets[1][0]; 
    return 0; 
} 
+0

'正在运行时错误。 – 2014-09-22 09:10:50

+0

@Thomas它应该打印1和2.但它没有打印任何东西,我得到错误,Windows已停止工作(我使用代码块) – 2014-09-22 09:13:53

回答

2

您已经只推动了矢量itemsets中的一个元素。
所以你只能访问:itemsets [0]。它给你的第一个元素就是你推送的矢量(我们称之为vector1)。

通过执行:

itemsets[0].push_back(1); 
itemsets[0].push_back(2); 

你把两个元素vector1

如果我们把它表示一个表它看起来像:

 col1 col2 
row1 1 2 

您可以访问元素vector1使用[] [],其中第一个索引是行,第二个是一列:

cout<<itemsets[0][0]<<itemsets[0][1]; 

编辑:
如果你想添加你需要添加vector2itemsets两行:

itemsets.push_back(vector<int>()); //vector1 
itemsets.push_back(vector<int>()); //vector2 
itemsets[0].push_back(1); 
itemsets[1].push_back(2); 
cout<<itemsets[0][0]<<itemsets[1][0]; 
return 0; 

您也可以使用std::vector构造从int

itemsets.push_back(vector<int>(1, 1)); //vector1 push 1 (first parameter is size of vector) 
itemsets.push_back(vector<int>(1, 2)); //vector2 push 2 

而且在C++ 11你可以添加更多的一个值一次:

在C++ 11
itemsets.push_back(std::vector<int>({1, 2})); //vector1 
itemsets.push_back(std::vector<int>({3, 4})); //vector2 
std::cout<<itemsets[0][0]<<itemsets[0][1]<<itemsets[1][0]<<itemsets[1][1]; 

你也可以在一行内初始化向量:

vector<vector<int> >itemsets = {{1}, {2}}; //add two rows: row1: 1, and row2: 2. 
+0

非常感谢。我明白了。 – 2014-09-22 09:23:27