任何人都可以帮我理解下面的代码有什么问题吗?
我正在使用C++20
我正在初始化“Interval”类向量的向量,但它被初始化为 0。
#include <bits/stdc++.h>
using namespace std;
class Interval {
public:
int start;
int end;
Interval() {}
Interval(int _start, int _end) {
start = _start;
end = _end;
}
};
vector<Interval> solve(vector<vector<Interval>> schedule) {
vector<Interval> allSchedule;
for(auto it : schedule) {
for(auto it1 : it) {
allSchedule.push_back(it1);
}
}
auto comparator = [](Interval a, Interval b) {
return a.start > b.start;
};
sort(allSchedule.begin(), allSchedule.end(), comparator);
return allSchedule;
}
int main() {
vector<vector<Interval>> schedule;
schedule.push_back({new Interval(1,2), new Interval(5,6)});
schedule.push_back({new Interval(1,3), new Interval(4,10)});
vector<Interval> allSchedules = solve(schedule);
for(auto it : allSchedules) {
cout << it.start << " -> " << it.end << endl;
}
return 0;
}
得到以下输出(意外)
1 -> 2
1 -> 3
0 -> 0
0 -> 0
vector<vector<Interval>> schedule;
schedule.push_back({new Interval(1,2), new Interval(5,6)});
这是一个非常奇怪的错误,因为
vector
有一个构造函数,可用于将其从两个指针(迭代器)初始化到其他容器,例如:
Interval intervals[2];
vector<vector<Interval>> schedule;
schedule.push_back({ &(intervals[0]), &(intervals[2])});
在您的情况下,两个指针不指向同一个容器,因此这是未定义的行为,并且 address santizer 将其标记为缓冲区溢出。