Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class ADS_set<Key,N>::Iterator {
- public:
- using value_type = Key;
- using difference_type = std::ptrdiff_t;
- using reference = const value_type &;
- using pointer = const value_type *;
- using iterator_category = std::forward_iterator_tag;
- private:
- key_type a , b;
- element *pos;
- bool special{false};
- value_type stop;
- void skip() {
- while (pos->mode != Mode::used && pos->mode != Mode::end) ++pos;
- if (special && pos->mode != Mode::end && std::equal_to<Key>{}(pos->key,stop))
- while (pos->mode != Mode::end) ++pos;
- }
- public:
- explicit Iterator(element *pos = nullptr): pos{pos} { if (pos) skip(); }
- explicit Iterator(element *pos, const key_type &stop): pos{pos}, special{true}, stop{stop} { if (pos) skip(); }
- reference operator*() const { return pos->key; }
- pointer operator->() const { return &pos->key; }
- Iterator &operator++() { ++pos; skip(); return *this; }
- Iterator operator++(int) { auto rc {*this}; ++*this; return rc; }
- friend bool operator==(const Iterator &lhs, const Iterator &rhs) { return lhs.pos == rhs.pos; }
- friend bool operator!=(const Iterator &lhs, const Iterator &rhs) { return !(lhs == rhs); }
- };
- ////////////////////////
- const_iterator x(const key_type &a, const key_type &b) const {
- if (!count(b)) return end();
- const_iterator rc{table, b};
- while (rc != end() && !std::equal_to<Key>{}(*rc, a)) ++rc;
- return rc;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement