template <typename Iterator> bool subsets_iterator<Iterator>::equal(const subsets_iterator<Iterator>& other) const
{
- if (this->end == std::nullopt and other.end == std::nullopt) {
+ if (this->end == std::nullopt && other.end == std::nullopt) {
return true;
}
if (this->k != other.k) {
if (this->k == 0) { // this->k == other.k == 0
return true;
}
- return this->end != std::nullopt and other.end != std::nullopt and this->P[0] == other.P[0];
+ return this->end != std::nullopt && other.end != std::nullopt && this->P[0] == other.P[0];
}
template <typename Iterator> const std::vector<Iterator>& subsets_iterator<Iterator>::dereference() const
++current_subset[k - 1];
++P[k - 1];
- const auto end = this->end.value();
- const bool shift_other_elements = current_subset[k - 1] == end;
+ const bool shift_other_elements = current_subset[k - 1] == end.value();
if (shift_other_elements) {
if (k == 1) {
// We're done in the case that k = 1; here, we've iterated
// through the list once, which is all that is needed
- this->end = std::nullopt;
+ end = std::nullopt;
return;
}
// element can be located. Thus, if `P[0] > (n - k)`, this means
// we've sucessfully iterated through all subsets so we're done
if (P[0] > (n - k)) {
- this->end = std::nullopt;
+ end = std::nullopt;
return;
}