C++ 无法识别While循环中未定义行为的来源,请求帮助
我有一个while循环,它接受一个向量,应该合并区间。比如说C++ 无法识别While循环中未定义行为的来源,请求帮助,c++,vector,iterator,undefined-behavior,C++,Vector,Iterator,Undefined Behavior,我有一个while循环,它接受一个向量,应该合并区间。比如说 Input: [[2,3],[2,2],[3,3],[1,3],[5,7],[2,2],[4,6]] Output: [[1,3],[4,7]] 另一个例子: Input: [[1,4],[4,5]] Output: [[1,5]] 我有一段代码,可以找到所有相邻的公共间隔,合并它们,然后查看行中的下一个元素: vector<vector<int>> merge(vector<vector<in
Input: [[2,3],[2,2],[3,3],[1,3],[5,7],[2,2],[4,6]]
Output: [[1,3],[4,7]]
另一个例子:
Input: [[1,4],[4,5]]
Output: [[1,5]]
我有一段代码,可以找到所有相邻的公共间隔,合并它们,然后查看行中的下一个元素:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end(),
[](vector<int> A, vector<int> B){return A[0] < B[0];});
int i{};
while (i++ < intervals.size()) {
while (intervals.size() >= 2 && intervals[i][1] >= intervals[i+1][0]) {
intervals[i+1] = {min(intervals[i][0], intervals[i+1][0]),
max(intervals[i][1], intervals[i+1][1])};
intervals.erase(intervals.begin() + i);
}
printResult(intervals);
}
return intervals;
}
答案应该是
[1 3 ]
[4 7 ]
但是我的while循环在第一次迭代后崩溃了
我不知道为什么会发生这种情况,如果有人能告诉我代码中的问题在哪里,我将不胜感激
谢谢
interval[i+1]
看起来它最终总会溢出。使用i++
,interval[i]
可能已经超出了范围<代码>间隔[i+1]甚至更糟。您是否使用调试器完成了此过程?仔细检查你的代码,直到它崩溃,你很可能就能确定发生了什么。有时候,当我看到别人的代码时,我觉得自己很傻。我认为一切就绪都会使算法变得不必要的复杂,你真的负担不起创建临时算法吗?至少将参数作为引用并返回它是需要解决的问题imho@Jarod42我将它改为I[1 3 ]
[4 7 ]