RomaValcer
RomaValcer

Reputation: 2956

std::sort doesn't recognise iterator category

My implementation of some vector 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) {...};
    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 {...}
};

But for come reasons calling std::sort(vector.begin(), vector.end()) outputs errors like no operator +=, which point to the fact std::sort treats my iterators like random access. Why?

Upvotes: 2

Views: 182

Answers (1)

nwp
nwp

Reputation: 9991

std::sort requires RandomAccessIterators. While it may recognize you gave it incompatible iterators it still doesn't work.

Upvotes: 7

Related Questions