这是我的mergesort函数,我无法理解为什么我总是得到一个"向量下标超出范围" VC ++ express 2010中的错误。
vector<int> Ordinatore::doMerge(vector<int> &v1, vector<int> &v2) {
int dimV1 = v1.size();
int dimV2 = v2.size();
int dimTotale = dimV1 + dimV2;
vector<int> merged;
int lh, rh;
lh=0;rh=0;
while(lh < dimV1) {
if (rh < dimV2 && v1[lh] <= v2[rh]) {
merged.push_back(v1[lh]);
lh++;
/* the trouble should start here as far as I've seen with cout & debugging */
while (rh < dimV2 && v2[rh] <= v1[lh]) {
merged.push_back(v2[rh]);
rh++;
}
}
else {
while (rh < dimV2 && v2[rh] <= v1[lh]) {
merged.push_back(v2[rh]);
rh++;
}
merged.push_back(v1[lh]);
lh++;
}
}
return merged;
}
答案 0 :(得分:0)
问题出现在你的循环中:
while(lh < dimV1) {
if (rh < dimV2 && v1[lh] <= v2[rh]) {
merged.push_back(v1[lh]);
lh++; // |<-- Problem
while (rh < dimV2 && v2[rh] <= v1[lh]) { // |
...
}
}
else {
...
lh++;
}
}
执行lh++
中的else
时,lh
会递增,while(lh < dimV1)
会重新启动。让我们假设它一直到lh == dimV1 - 1
...
if
条件评估为true
,则lh++
执行正确,如果您已标记“麻烦应从此处开始”。while (rh < dimV2 && v2[rh] <= v1[lh])
会导致崩溃,因为lh
现在等于dimV1
,但您使用它来索引v1
。您可以在此Wikipedia Article中详细了解合并排序。