我正在尝试返回一个写一个函数,该函数创建一个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;
}
答案 0 :(得分:3)
arr[x-1].push_back(A+1-min);
您正在尝试访问arr[x-1]
,但此时arr
是一个空值。
由于您知道arr
的大小为2*A-1
(至少这是您的代码中出现的内容),因此您可以添加
arr.resize(2*A-1);
,或直接在声明它时:
vector<vector<int> > arr(2*A-1);
您可以进一步初始化内部向量:
for(int x=1;x<(2*A);x++)
{
arr[x-1].resize(2*A-1);
for(int y=1;y<(2*A);y++)
并替换
arr[x-1].push_back(A+1-min);
与
arr[x-1][y-1]=(A+1-min);
答案 1 :(得分:2)
您需要这样做(假设您的矩阵大小为ROWS x COLS
)
vector<vector<int>> arr(ROWS, vector<int>(COLS));
并且不再需要push_back
了。现在保留了2D数组的整个内存,因此您只需使用arr[i][j]
进行写入即可。代码也比使用push_back
快一点,因为push_back
在需要调整向量大小时确实会减慢重新分配。
然而,尝试避免这种嵌套向量,因为它们很慢。使用平面矢量,并从2D到1D映射,反之亦然。
答案 2 :(得分:0)
没有合适的结构可以节省您的时间和精力,让您的项目更快。使用2D数组代替push_back
使用arr[i][j]