我试图返回一个写函数,该函数创建一个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/