我对此进行了调试,发现它是由于最后一个for循环中的v3.size()
而引起的,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
答案 0 :(得分:3)
v3
为空。 v3.size()
是一个无符号值。因此,您将0-1
用作循环的上限,(以无符号算法)这是一个很大的值(在64位计算机上为2 64 -1)。
简单的解决方法是不检查i < v3.size() - 1
,而是检查i + 1 < v3.size()
作为循环绑定。
(编译器确实会警告比较有符号和无符号的值,但是即使i
是无符号的,仍然会出现问题。当循环使用小于a的整数时,您只需要小心一点完整的容器尺寸。)