我正在完成一个合并排序函数,但我得到两个“预期的声明错误”。他们的位置标有'〜'。我已经解决了,但我无法弄清问题是什么,我认为需要新鲜的眼睛。
template <typename Comparable>
void merge(vector<Comparable> & a, int p, int q, int r)
{
std::vector<Comparable> tmp;
int y = p;
int first = p;
int sec = q + 1;
while ((first <= q) && (sec <= r)) {
if (a[first] <= a[sec]) {
tmp[i] = a[first];
first++;
}
else {
tmp[i] = a[sec];
sec++;
}
y++;
}
if (first > q) {
for (int x = sec; x <= end; x++) {
tmp[i] = a[x];
y++;
}~
}
else {
for (x = first; x <= q; x++) {
tmp[i] = a[x];
y++;
}
}
a = tmp;
}~
答案 0 :(得分:0)
你的for循环存在一些问题。在for循环中声明的变量x
的范围具有for循环的局部范围,但是您尝试在第二个for循环中使用它。如果要重新使用它,则必须在for循环之外声明它。此外,i
和end
未在任何地方声明。
int x = 0; // declare x outside so both loops can use it
int end = 0; // assign it whatever you need it to be
int i = 0; // assign it whatever you need it to be
for (x = sec; x <= end; x++) {
tmp[i] = a[x];
y++;
}
for (x = first; x <= q; x++) {
tmp[i] = a[x];
y++;
}
您可能希望在我之前声明,因为代码的第一部分也使用它。
如果您阅读了错误消息,他们通常会告诉您哪些变量是未声明的。