Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const_iterator w(const size_t *a) const { return const_iterator{table, a}; }
- ///////////////////////////////////////////////////////
- template <typename Key, size_t N>
- 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:
- element *pos;
- const size_t *a;
- size_t n;
- void skip() { while (pos->mode != Mode::used && pos->mode != Mode::end) ++pos; }
- public:
- //explicit Iterator(element *pos = nullptr): pos{pos} { if (pos) skip(); }
- explicit Iterator(element *pos = nullptr, const size_t *a = nullptr): pos{pos}, a{a}, n{1}{ if (pos) skip(); }
- reference operator*() const { return pos->key; }
- pointer operator->() const { return &pos->key; }
- Iterator &operator++() {
- if (a) {
- if (n < *a) { ++n; return *this; }
- else { n = 1; ++a;}
- }
- ++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 w(const size_t *a) const 24.09.2019 ne znam ga pozvati
- /* ADS_set<int, 7> h{5,1,7,3,4};
- h.dump();
- size_t a[5] = {1,2,3,1,2};
- auto iter = h.w(a);
- while (iter != h.end()) {
- std::cout << "iter: " << *iter << std::endl;
- ++iter;
- } */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement