无法在C ++中分配2D向量

时间:2018-11-27 14:17:32

标签: c++ c++11 stdvector

我在一个问题中使用dfs,但是直到现在我还没有在主菜单中调用dfs,并且我的程序崩溃了。最近我在c中编程,现在我切换到{ {1}}, 所以我是cpp的新手,我知道向量中的错误之处,请告诉我可以改善的地方 我知道向量可以自动在那增加大小。

cpp

2 个答案:

答案 0 :(得分:4)

您的程序由于访问未分配的内存而崩溃。正确的方法是

std::vector<std::vector<int>> graph(5); // allocates 5 rows of vector of vectors
                                   ^^^^

第二,在C ++数组中,索引从0开始到n-1。因此,您需要

graph[0].push_back(2);  // element at (0,0)
graph[0].push_back(3);  // element at (0,1)
graph[1].push_back(6);  // element at (1,0)
graph[1].push_back(4);  // element at (1,1)
....

或者,您可以使用aggregate initialization直接初始化矢量的矢量

std::vector<std::vector<int>> graph
{
    {2, 3},   // first row of vector
    {4, 5},   // second row of vector
    {6},      // third row of vector
    {7, 8, 9} // forth row of vector
};

emplace每行向量到向量的向量

using Row = std::vector<int>;
std::vector<Row> graph;
graph.emplace_back(Row{ 2, 3 });
graph.emplace_back(Row{ 4, 5 });
graph.emplace_back(Row{ 6 });
graph.emplace_back(Row{7, 8, 9});

答案 1 :(得分:3)

向量的大小按照您声明的方式为零。

您可以做的是声明带有大小的向量。

int v = 10;
std::vector<std::vector<int>>graph(v);
graph[1].push_back(2);

这将起作用。

相关问题