C++ 标准::排序不';不能识别迭代器范畴

C++ 标准::排序不';不能识别迭代器范畴,c++,templates,c++11,iterator,C++,Templates,C++11,Iterator,我的一些向量迭代器的实现: class iterator : public std::iterator<std::input_iterator_tag, int> { Vector<T> *vector; size_t position; public: iterator(Vector<T> *vector_, size_t idx) {...}; iterator(const iterator &it) {...};

我的一些向量迭代器的实现:

class iterator : public std::iterator<std::input_iterator_tag, int> {
    Vector<T> *vector;
    size_t position;

public:
    iterator(Vector<T> *vector_, size_t idx) {...};
    iterator(const iterator &it) {...};
    friend bool operator == (const iterator &a, const iterator &b) {...};
    friend bool operator > (const iterator &a, const iterator &b) {...};
    friend bool operator < (const iterator &a, const iterator &b) {...};
    friend bool operator >= (const iterator &a, const iterator &b) {...};
    friend bool operator <= (const iterator &a, const iterator &b) {...};
    friend bool operator != (const iterator &a, const iterator &b) {...};
    iterator &operator = (const iterator &b) {...};
    T operator * () {...};
    iterator &operator ++ () {...}
    iterator &operator -- () {...}

    std::ptrdiff_t operator - (const iterator &b) const {...}
};
类迭代器:公共std::迭代器{ 向量*向量; 大小和位置; 公众: 迭代器(Vector*Vector,size\t idx){…}; 迭代器(constiterator&it){…}; friend bool运算符==(常量迭代器&a,常量迭代器&b){…}; friend bool运算符>(常量迭代器&a,常量迭代器&b){…}; friend bool运算符<(常量迭代器&a,常量迭代器&b){…}; friend bool运算符>=(常量迭代器&a,常量迭代器&b){…};
friend bool操作符需要
RandomAccessIterator
s。虽然它可能会识别出你给它的是不兼容的迭代器,但它仍然不起作用。

与问题无关,
input\u iterator\u tag
不是此迭代器的正确标记,
int
不是正确的
值\u type
。显然你还没有阅读do用于
std::sort
的文档,但它们是通过猜测进行编程的。我要补充的是
std::sort
需要一个可变的
RandomAccessIterator
。您应该提供返回l值引用的
运算符*()
。例如,Libstdc++-v3需要这个(在插入排序中,从
sort
调用).