【发布时间】:2018-03-10 12:56:36
【问题描述】:
我正在尝试在 c++ 中实现一个简单的合并排序,但我一直遇到这个错误:
我的代码:
void merge(vector<int> &data,int left,int mid,int right) {
vector<int> L, R, v;
int i, j;
for (i = 0; i < mid - left + 1; i++) {
L.push_back(v[left + i]);
}
for (j = 0; j < right - mid; j++) {
R.push_back(v[mid + j + 1]);
}
i = j = 0;
int k = left;
while (i < L.size() && j < R.size()) {
if (L[i] < R[j]) {
v[k++] = L[i++];
}
else {
v[k++] = R[j++];
}
}
while (i < L.size()) {
v[k++] = L[i++];
}
while (j < R.size()) {
v[k++] = R[j++];
}
vector<int>::const_iterator iter = v.begin();
for (; iter != v.end(); ++iter)
{
data[left++] = *iter;
}
}
void mergeSort(vector<int> &v, int left, int right) {
if (left < right) {
int mid = (left + right) / 2;
mergeSort(v, left, mid);
mergeSort(v, mid + 1, right);
merge(v, left, mid, right);
}
}
在 main 中调用:mergeSort(numbers,0,numbers.size());,其中 numbers 是带有一些数字的向量。
如何解决这个断言失败,向量下标超出范围是什么意思?
【问题讨论】:
-
那是一个崩溃。您使用调试器来找出它在代码中发生的位置,并检查涉及的变量以确保它们看起来正常。所以先按“重试”按钮调试进入调试器。
-
也就是说,消息“向量下标超出范围”应该是对正在发生的事情的一个很大的暗示。 debugging your code.
-
@Raul Marinau 错误的原因是函数合并的代码非常糟糕。糟糕的代码包含错误是编程规则。
-
@Raul Marinau 至少函数合并中有错别字。循环中必须有向量数据,而不是向量 v。 for (i = 0; i
标签: c++ algorithm vector mergesort