C++模板化的quickSort无法使用迭代器,错误C2061

C++ templated quickSort not working with iterators, error C2061

本文关键字:迭代器 C2061 错误 quickSort C++      更新时间:2023-10-16

我正在为使用迭代器的各种容器编写快速排序算法的模板版本,但当我试图构造Object::迭代器时,发现了以下错误。

  • 错误C2061:语法错误:标识符"迭代器"

  • 错误C2780:"void myQuickort(Container&)":需要1个参数-3(我认为这个错误是错误C2061的结果)

如何在编译器不给我这些错误的情况下为模板类Container创建迭代器。

我的代码写在下面:

#include<iostream>
#include<vector>
#include<stack>
#include<list>
#include<algorithm>
template<class Itr2Printable>
void printVec(Itr2Printable begin, Itr2Printable end)
{
    // couts containing  Objecorder
    std::cout << "[ ";
    for (begin; begin != end; ++begin)
        std::cout << *begin << " ";

    std::cout << "]";
}
template<class Container>
void myQuickSort(Container& c, Container::iterator begin, Container::iterator end)
{
    Container::iterator mid = begin + distance(begin, end) / 2;
    // inclomplete
}

int main()
{
    std::vector<int> vec{ 15, 75, 50, 0, 100, 5 };
    std::cout << "nntquickSort(";
    printVec(vec.begin(), vec.end());
    std::cout << ", " << 0 << ", " << vec.size() - 1 << ")n";
    myQuickSort(vec, vec.begin(), vec.end());
}

非常已知的问题。这是一个重复的问题,但对我来说,键入答案比查找重复的问题更容易。更换

void myQuickSort(Container& c, Container::iterator begin, Container::iterator end)

带有

void myQuickSort(Container& c, typename Container::iterator begin, typename Container::iterator end)

顺便说一下,快速排序功能的设计是不正确的。如果您用迭代器来表达函数,那么也不要请求将容器传递给函数。