[英]why I am getting runtime error in this code
我对此进行了调试,发现它发生是因为v3.size()
在最后一个 for 循环中, v3.size()
的外部循环值为0
,而循环内部值为 18076382629293 类似这样的东西。 为什么?
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
vector<vector<int>> v;
int a, b, c;
map<vector<int>, int> m;
for (int i = 0; i < n; i++) {
cin >> a >> b >> c;
vector<int> v1;
v1.push_back(a);
v1.push_back(b);
v1.push_back(c);
m[v1] = i + 1;
v.push_back(v1);
// cout << 1;
}
sort(v.begin(), v.end());
// int j = i;
vector<vector<int>> v2;
for (int i = 0; i < n; i++) {
if (i == n - 1) {
v2.push_back(v[i]);
continue;
}
if (v[i][0] == v[i + 1][0]) {
if (v[i][1] == v[i + 1][1]) {
cout << m[v[i]] << " " << m[v[i + 1]] << endl;
i++;
continue;
}
}
v2.push_back(v[i]);
}
vector<vector<int>> v3;
for (int i = 0; i < v2.size(); i++) {
if (i == v2.size() - 1) {
v3.push_back(v2[i]);
continue;
}
if (v2[i][0] == v2[i + 1][0]) {
cout << m[v2[i]] << " " << m[v2[i + 1]] << endl;
i++;
continue;
}
v3.push_back(v2[i]);
}
for (int i = 0; i < v3.size() - 1; i += 2) {
cout << m[v3[i]] << " " << m[v3[i + 1]] << endl;
continue;
}
}
测试用例
2
-32839949 -68986721 41592956
-32839949 -31435211 41592956
当您到达最后一个循环时, v3
为空。 v3.size()
是一个无符号值。 因此,您使用0-1
作为循环上限,它(在无符号算术中)是一个巨大的值(在 64 位机器上为 2 64 -1)。
简单的解决方法是不检查i < v3.size() - 1
而是检查i + 1 < v3.size()
作为循环绑定。
(编译器确实会警告比较有符号和无符号值,但即使i
没有符号,问题仍然会发生。当循环小于一个完整容器的大小时,您只需要小心极端情况。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.