微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Visual Studio错误:使用向量实现QuickSort时出现“无法在开始之前寻找向量迭代器”

如何解决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设置为beginend,则可能会遇到问题。所以你需要检查。

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 举报,一经查实,本站将立刻删除。