c ++中的二维向量

时间:2014-09-22 09:07:54

标签: c++ vector

如何在c ++中使用2D向量。 我写了下面的代码,但它没有工作。我得到运行时错误。

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;
}

1 个答案:

答案 0 :(得分: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];

编辑:
如果您想添加两行,则需要将vector2添加到itemsets

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中,您可以一次添加多个值:

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];

同样在C ++ 11中,您可以在一行内初始化矢量:

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