#include <bits/stdc++.h> using namespace std; int main() { int n,m; cin>>n>>m; int lines[m][n]; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ cin>>lines[i][j]; } } int sum=0; vector<pair<int,int> >offsets={{-1,0},{1,0},{0,-1},{0,1}}; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(lines[i][j]==1){ sum++; continue; } for(auto offset:offsets){ int newi=i+offset.first; int newj=j+offset.second; if(newi>=0&&newi<m&&newj>=0&&newj<n&&lines[newi][newj]==1){ sum++; break; } } } } cout<<sum<<endl; return 0; } 这段代码和上段代码为什么输出不一样
时间: 2024-04-15 11:25:07 浏览: 86
万能头文件#include&amp;lt;bits/stdc++.h&amp;gt; using namespace std;
这两段代码的输出不一样是因为它们使用了不同的数据结构来表示二维数组。
在第一段代码中,使用了 `vector<vector<int>>` 来表示二维数组。这种方式可以动态地调整数组的大小,并且支持使用 `vector` 的成员函数来进行遍历和操作。
而在第二段代码中,使用了普通的二维数组 `int lines[m][n]`。这种方式在定义数组时需要指定固定的大小,且不能动态调整。而且这种方式在传递给函数时需要格外小心,因为数组名会退化为指针,无法知道数组的大小。
如果你输入的数据超过了定义的数组大小,可能会导致未定义的行为,例如访问越界的数组元素。这可能是导致输出不一致的原因之一。
为了避免这个问题,你可以尝试使用动态分配的二维数组,或者使用 `vector` 来替代普通的数组。这样可以避免数组越界和未定义行为的问题。
阅读全文