如何解决如何在不知道尺寸的情况下在C ++中传递2D数组
#include<iostream>
using namespace std;
int n;
int diagonal(int m[][n]){
int r = 0,l = 0;
for(int i=0;i<n;i++){
l += m[i][i];
r += m[n-i][i];
}
if(r>l) return r - l;
else return l - r;
}
int main(){
cin >> n;
int a[n][n];
for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin >> a[i][j];
cout << diagonal(a) << endl;
return 0;
}
我不知道为什么在代码上面运行会出错。
错误1:数组绑定不是']'令牌之前的整数常量,如果我从用户那里获取常量值,我应该如何传递它。
错误2:在此范围内未声明'n'
6 | for(int i = 0; i
解决方法
Error No.1: array bound is not an integer constant before ']' token
, 如果我从用户那里获取常数值,我应该如何传递它。
不能。当您要使用可变长度数组时,通常应将其替换为std::vector
。
示例:
#include <cstdlib>
#include <iostream>
#include <vector>
int diagonal(const std::vector<std::vector<int>>& m) {
int r = 0,l = 0;
for(size_t i = 0; i < m.size(); ++i) {
l += m[i][i];
// r += m[n - i][i]; // m[n][0]` when `i == 0`.
r += m[m.size() - i - 1][i];
}
// this is most likely implemented without branching:
return std::abs(r - l);
}
int main() {
// use an unsigned type suitable for indexing like size_t
if(size_t n; std::cin >> n) {
// int a[n][n]; // not valid C++
// vector replacement:
std::vector<std::vector<int>> a(n,std::vector<int>(n));
for(size_t i = 0; i < n; i++) {
for(size_t j = 0; j < n; j++) {
std::cin >> a[i][j];
}
}
std::cout << diagonal(a) << '\n';
}
}
,
使用模板:
template<auto X,auto Y>
int diagonal(int (&m)[X][Y]){
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。