如何解决Visual Studio错误:使用向量实现QuickSort时出现“无法在开始之前寻找向量迭代器”
我试图使用向量和迭代器实现Quicksort。但是编译器给我一个错误,例如:“开始前无法寻找向量迭代器”。我不明白为什么,因为代码适用于代码块。谁能帮我? 有一种方法可以输入向量的大小并使用rand自动生成。此外,我还添加了一种在Quicksort之前和之后打印矢量的方法。
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
using namespace std;
void printVector(vector<int> v) {
for (auto i = v.begin(); i < v.end(); i++)
cout << " " << *i;
cout << endl;
}
void printVectorIterator(vector<int>::iterator begin,vector<int>::iterator end) {
for (auto i = begin; i < end; i++)
cout << " " << *i;
cout << endl;
}
vector<int>::iterator Partition(vector<int>::iterator begin,vector<int>::iterator end) {
auto partitionIndex = begin;
auto pivot = end;
for (auto i = begin; i < end; i++) {
if (*i <= *pivot) {
iter_swap(i,partitionIndex);
partitionIndex++;
}
}
cout << "pivot" << *pivot << endl;
iter_swap(partitionIndex,pivot);
return partitionIndex;
}
void QuickSort(vector<int>::iterator begin,vector<int>::iterator end) {
if (begin < end) {
auto q = Partition(begin,end);
QuickSort(begin,q - 1);
QuickSort(q + 1,end);
}
}
vector<int> random_vector() {
int n;
vector<int> A;
cout << "Size of the vector: ";
cin >> n;
srand((unsigned)time(0));
for (auto i = 0; i < n; i++) {
int random_integer = 1 + rand() % 100;
A.push_back(random_integer);
}
return A;
}
int main() {
vector<int> A = random_vector();
cout << "\nUnsorted vector: " << endl;
printVector(A);
QuickSort(A.begin(),A.end() - 1);
cout << "\nSorted vector: " << endl;
printVector(A);
return 0;
}
解决方法
在Quicksort
函数中,如果Partition(begin,end)
将q
设置为begin
或end
,则可能会遇到问题。所以你需要检查。
void QuickSort(vector<int>::iterator begin,vector<int>::iterator end) {
if (begin < end) {
auto q = Partition(begin,end);
if (q != begin) QuickSort(begin,q - 1);
if (q != end) QuickSort(q + 1,end);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。