当我在 [20000][3] 形式的 bks(向量的向量)上调用 std::sort 时,以下代码崩溃。在对 compBks 进行 20000 次调用后,比较器 compBks() 似乎在大小为 0 的 v1 和大小为 3 的 v2 上被调用,这可能导致崩溃。
但是为什么用无效的 v1 调用 compBks?
任何原因?
class Solution {
public:
struct compBks {
bool operator() (vector<int> v1, vector<int> v2) {
cout << v1.size() << " " << v2.size() << endl;
if (v1[0] < v2[0]) return true;
else if (v1[0] == v2[0])
return v1[1] <= v2[1];
return false;
}
};
vector<int> corpFlightBookings(vector<vector<int>>& bks, int n) {
vector<int> res(n, 0);
sort(bks.begin(), bks.end(), compBks());
return res;
}
};
int main() {
Solution s;
vector<vector<int>> bks(20000, {1, 20000, 10000});
s.corpFlightBookings(bks, 20000);
}
崩溃是:运行时错误:引用绑定到“value_type”类型的空指针(stl_vector.h)
就在崩溃之前,compBks() 将 v1.size 打印为 0,将 v2.size 打印为 3。
如果为 bks 正确调用 std::sort,为什么 v1 的大小会为 0?