Improve util::dfs::cycle_iterator

This commit is contained in:
Nikita Lisitsa 2023-04-15 13:16:09 +03:00
parent 3bfe867cc0
commit df5e188236

View file

@ -20,20 +20,39 @@ namespace psemek::util
struct cycle_iterator struct cycle_iterator
{ {
using iterator_category = std::forward_iterator_tag;
using value_type = Index;
using reference_type = Index;
using pointer = Index *;
using difference_type = int;
dfs * parent; dfs * parent;
Index i; Index i;
Index operator *() const { return i; } Index operator *() const { return i; }
cycle_iterator & operator ++() cycle_iterator & operator ++()
{ {
i = parent->parent_[i]; i = parent->parent_[i];
return *this; return *this;
} }
cycle_iterator operator ++(int)
{
auto copy = *this;
i = parent->parent_[i];
return copy;
}
friend bool operator == (cycle_iterator const & i1, cycle_iterator const & i2) friend bool operator == (cycle_iterator const & i1, cycle_iterator const & i2)
{ {
return i1.i == i2.i; return i1.i == i2.i;
} }
friend bool operator != (cycle_iterator const & i1, cycle_iterator const & i2)
{
return i1.i != i2.i;
}
}; };
template <typename CycleCallback> template <typename CycleCallback>