首页 > 解决方案 > 自定义合并和 std::inplace_merge 之间的区别

问题描述

当我使用以下合并实现时,我有一个函数可以工作:

void merge(vector<int>& A, int start, int mid, int end)
{
    int n1 = (mid - start + 1);
    int n2 = (end - mid);
    int L[n1], R[n2];
    
    for (int i = 0; i < n1; i++)
        L[i] = A[start + i];
    for (int j = 0; j < n2; j++)
        R[j] = A[mid + 1 + j];
    int i = 0, j = 0;
    for (int k = start; k <= end; k++) {
        if (j >= n2 || (i < n1 && L[i] <= R[j]))
            A[k] = L[i++];
        else
            A[k] = R[j++];
    }
}

并使用merge(A, start, mid, end);.

但是,当我改为使用时std::inplace_merge(A.begin() + start, A.begin() + mid, A.begin() + end);,会得到不正确的结果。

这两者有什么区别?我希望他们是一样的

标签: c++

解决方案


推荐阅读