c++ - 自定义合并和 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++ - 在类中初始化 QHash
- python - 在两个不同的文件夹中上传文件并重命名文件?
- html - 列内的文本溢出。如何强制文本始终水平扩展并与列宽内联
- reactjs - 我应该在 React 中使用哪种类型的组件:功能组件或类基础组件?
- javascript - Google maps API Autocomplete:仅输出特定州的城市
- c# - 返回 IAsyncEnumerable
和来自 Asp.Net 核心控制器的 NotFound - python - 如何在 Discord.py 中发送消息并从中收集反应
- c# - 错误“需要对象引用”是什么意思?
- javascript - 如何将 Javascript 转换为 jQuery
- ios - 从 HealthKit 获取 Apple Watch 应用程序的心率和步行距离以及计步器