Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法识别While循环中未定义行为的来源,请求帮助_C++_Vector_Iterator_Undefined Behavior - Fatal编程技术网

C++ 无法识别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

我有一个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<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 ]