我知道有几个关于这个问题的帖子,但我似乎无法完全理解原因(我仍然是C ++的新手,3个月的经验) 我想要做的是在struct的向量上实现quicksort(我知道有一个内置的qsort函数,但我想知道事情是如何工作的)。 这是我的快速排序代码(通过比较word.freq排序):
int partition(vector<word> &database, int start, int end) //partition the vector
{
word pivot = database[end];
int pIndex = start;
for (int i = pIndex; i < end; i++)
{
if (database[i].freq > pivot.freq)
{
iter_swap(database.begin() + pIndex, database.begin() + i);
pIndex++;
}
}
iter_swap(database.begin() + pIndex, database.end());
return pIndex;
}
void quickSort(vector<word> &database, int start, int end)
{
if (start < end)
{
int partitionIndex = partition(database, start, end);
quickSort(database, start, partitionIndex - 1);
quickSort(database, partitionIndex + 1, end);
}
}
请任何人澄清我的代码中的错误。所有批评都表示赞赏。我想学习。谢谢。
答案 0 :(得分:1)
end()
不会将迭代器返回到向量的元素。它将迭代器返回到最后一个元素之后的一个元素。所以这一行可能是你问题的原因。
iter_swap(database.begin() + pIndex, database.end());
尝试将database.begin() + pIndex
处的元素与database.end()
处的元素交换,该元素无效。它将涉及database.end()
的解除引用,这解释了为什么你得到消息&#34;迭代器不能解引用&#34;。如果你想与最后一个元素交换,你会这样做:
iter_swap(database.begin() + pIndex, database.end() - 1);