如何在二维数组的末尾添加列和行?

时间:2019-05-01 13:29:19

标签: c++ matrix multidimensional-array

无论何时调用该函数,我都想在2D数组的末尾添加行和列。

template <typename vertex> void directed_graph<vertex>::add_vertex(const vertex& u) 
{
    if (!directed_graph<vertex>::contains(u))
    {
        vertices.push_back(u);
        for (unsigned i = 0; i < vertices.size()-1; i ++)
            {
                adj_matrix[i].resize(vertices.size());
                adj_matrix[i][vertices.size()-1] = false;
            }

        adj_matrix.resize(vertices.size());
        for (unsigned i = 0; i < vertices.size(); i ++)
        {
            adj_matrix[vertices.size()-1][i] = false;
        }   
    }
}

我如上所述尝试了此代码,收到的是SegFault。

1 个答案:

答案 0 :(得分:0)

您想做什么

您打算在{{1}中的初始n*n之后,将(n+1)*(n+1)邻接矩阵增长到nvertices.size()-1的{​​{1}} }向量。

(几乎)看起来不错:

  • 您的第一个push_back()循环会调整vertices个现有内部向量的大小,事实上会添加缺失的列。
  • 然后调整外部向量的大小,这将在末尾添加默认构造的(空)向量。
  • 然后在第二个for循环中,尝试通过直接为其元素分配值来初始化新内部向量。

这是怎么了?

不幸的是,当您执行此最后一步时,最后一个内部向量仍然为空。因此,您的第二个for循环使用超出范围的下标n,这会导致UB(可能的症状:seg fault)。

如何解决?

您需要做的就是在第二个循环之前调整最后一个内部向量的大小:

for