Cysheper @ 2024-11-08 17:56:33
为什么用C++20会编译失败,用C++17就过了,有大佬懂吗?
C++20 失败
C++17 AC
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
vector<vector<int>> v(1010,vector<int>(1010,0));
void solve(){
int n, m;
cin >> n >> m;
while(m--) {
int x, y, a, b;
cin >> x >> y >> a >> b;
v[x][y]++;
v[x][b + 1]--;
v[a + 1][y]--;
v[a + 1][b + 1]++;
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
v[i][j] += v[i - 1][j] + v[i][j - 1] - v[i - 1][j - 1];
cout << v[i][j] << ' ';
}
cout << "\n";
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
solve();
return 0;
}
by LionBlaze @ 2024-11-08 17:58:57
@Cysheper
vector<vector<int>> v(1010,vector<int>(1010,0));
把初始化放到 main
或者 solve
函数里试试?
by _WRYYY_ @ 2024-11-08 18:00:57
数组都定长了为什么不直接使用定长数组,真想用 STL 为什么不用 array
by robinyqc @ 2024-11-08 18:32:51
@Cysheper C++20 起 vector 构造函数变为 constexpr。
你的 vector 里面大小和内容给的都是常量,所以 vector 在编译期就会初始化。
接下来是我的推测:在洛谷的 g++ 版本,展开应该是在栈上进行的,而通常来说 1000 * 1000 的内容是超过默认栈空间的,所以爆栈内存了。
根据以上内容,你可以:
int len = 1010;
vector<vector<int>> v(len, vector<int>(len, 0));
int v[1010][1010];
或 array<array<int, 1010>, 1010> v;
都是可以的。
by Cysheper @ 2024-11-08 18:33:00
@LionBlaze 解决了,谢谢
by LionBlaze @ 2024-11-08 18:34:04
@robinyqc 膜拜神犇!
by Cysheper @ 2024-11-08 18:36:12
@robinyqc 懂了,膜拜dalao,orz
by Cysheper @ 2024-11-08 19:14:55
@WRYYY 第一次听说array。。赶紧补上来。谢谢,dalao