我正在尝试在2D矩阵中打印同心矩形图案。
但是,它显示了一个分段错误。我尝试将所有代码都作为评论。
我认为声明本身有错。它是什么?
int l = 2*A - 1;
vector<vector<int> > ar(l);
for(int i = 0; i<(2*A - 1); i++)
{
for (int j = 0; j<(2*A - 1); j++)
{
int h= max(abs(A - i + 1),abs(A - j + 1));
ar[i][j] = h+1;
}
}
return ar;
答案 0 :(得分:1)
我认为声明本身有错。它是什么?
你是对的。你有一个二维向量,你只需要通过声明:
来关注单层vector<vector<int> > ar(l);
简单修复就是:
std::vector< std::vector<int> > ar(l, std::vector<int>(l));
现在可以确保初始化满载0
S的二维向量数组,其大小为2*A - 1
。
立即查看:https://www.ideone.com/1wYCba
简短说明:但是如果您真的在使用concentric rectangular pattern,那么您的代码/逻辑是错误的。上面的代码不会打印您想要的内容,即使它现在符合要求。
答案 1 :(得分:0)
在开始内循环之前,添加:
ar[i].resize(2*A - 1);
(如果A
已修复,您可能会发现std::array
比矢量更方便。)