C++ 矩阵中的螺旋遍历
我试图解决螺旋遍历问题,但代码中出现了两个错误,我不知道这个错误是什么意思C++ 矩阵中的螺旋遍历,c++,matrix,traversal,C++,Matrix,Traversal,我试图解决螺旋遍历问题,但代码中出现了两个错误,我不知道这个错误是什么意思 spiralmatrix.cpp:48:21: error: cannot convert ‘int**’ to ‘int (*)[100]’ 48 | spiralprint(input,row,col); | ^~~~~ | | | int*
spiralmatrix.cpp:48:21: error: cannot convert ‘int**’ to ‘int (*)[100]’
48 | spiralprint(input,row,col);
| ^~~~~
| |
| int**
spiralmatrix.cpp:4:23: note: initializing argument 1 of ‘void spiralprint(int (*)[100], int, int)’
4 | void spiralprint (int input[][100], int row ,int col)
| ~~~~^~~~~~~~~~~~
我的职责是:
void spiralprint (int input[][100], int row ,int col)
{
int rs=0,cs=0,re=row-1,ce=col-1,count=0;
while( count != row*col){
for(int i =cs;i<ce;i++){
cout<< input[rs][i]<<" ";
count++;
}
rs++;
for(int i=rs;i<=re;i++){
cout<<input[i][ce]<<" ";
count++;
}
ce--;
for(int i=ce;i>=cs;i--){
cout<<input[re][i]<<" ";
count++;
}
re--;
for(int i=re;i>=rs;i--){
cout<<input[i][cs]<<" ";
count++;
}
cs++;
}
}
void螺旋打印(整数输入[][100],整数行,整数列)
{
int rs=0,cs=0,re=row-1,ce=col-1,count=0;
while(计数!=行*列){
对于(int i=cs;i您需要匹配类型。足够接近并不真正算数。如果您有一个int**
变量,那么自然匹配是一个int**
参数,而不是不兼容的int[][100]
int[][100]
的布局看起来像是以连续序列的形式端对端存储在内存中的任意数量的int[100]
序列
int**
的布局看起来像是指向100个int
的单个序列的指针数组。这些指针不太可能是连续的,更安全的做法是假设它们随机分布在内存空间中
您无法轻松地在这些表单之间进行转换。如果您使用的是int**
,您基本上无法使用它,但好消息是,您仍然可以将单个元素引用为x[i][j]
,就像使用int[]100一样
,只是编译器发出不同的指令来处理不同的内存布局
提示:尽可能避免使用new[]
和C样式的数组。使用std::vector
并尽量使结构保持“平坦”。大多数2D数组都可以被视为1D数组并进行模拟,在这里可以像a[x+y*h]那样进行查找
对于给定的x,y
坐标对于给定的h,w
高度/宽度
你是否被限制在C++的哪些特性中?通常避免指针,因为它们确实会造成很多麻烦。提示:<代码> int *>代码>作为一种类型,意味着代码> int *>代码>作为一种参数类型。错误意味着你被误导相信指针的指针相当于数组的指针;它们不是。我没有得到你的TR。我想说的是,你能再解释一点吗?实际上我对这个概念并不熟悉@Tadman你需要匹配类型。足够接近并不算什么。如果你有一个int**
变量,那么自然匹配就是一个int**
参数,而不是int[][100]
这是不兼容的。你的解释对我来说非常清楚。所以我应该使用向量而不是数组?它对数组不起作用?它会对数组起作用,但是std::vector
在很多方面都更好,特别是因为你不需要处理内存管理。我会尝试一下,谢谢
int main (){
int t;
cin >> t;
while(t--){
int row,col;
cin >> row>> col;
int **input = new int *[row];
for(int i=0;i<row;i++){
input[i]=new int[col];
for(int j =0;j<col;j++){
cin>>input[i][j];
}
}
spiralprint(input,row,col);
for(int i =0;i<row;i++){
delete[] input[i];
}
delete[] input;
cout<<"\n";
}
}