我试图返回一个写函数,该函数创建一个vector<vector<int> >并填充并返回它。尝试将元素推送到vector<vector int>时遇到分段错误。谁能帮我解决这个问题?

 vector<vector<int> > Solution::prettyPrint(int A)
    {
        vector<vector<int>> arr;

        for(int x=1;x<(2*A);x++)
        {
            for(int y=1;y<(2*A);y++)
            {
                int xp=x,yp=y;
                if(x>A) xp=2*A-x;
                if(y>A) yp=2*A-y;

                int min=(xp<yp)?xp:yp;

                arr[x-1].push_back(A+1-min);
            }
        }

        return arr;
    }

最佳答案

您需要做(假设矩阵的大小为ROWS x COLS)

vector<vector<int>> arr(ROWS, vector<int>(COLS));

不再需要push_back。现在已保留了2D数组的整个内存,因此您可以使用arr[i][j]对其进行写入。该代码也比使用push_back快一点,因为push_back在需要调整 vector 大小时确实会减慢重新分配的速度。

但是,请尽量避免使用此类嵌套 vector ,因为它们的速度较慢。请改用平面 vector ,然后从2D映射到1D,反之亦然。

关于c++ - 如何初始化并填充vector <vector <int>>类型的 vector ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33675488/

10-11 23:05
查看更多