aboutsummaryrefslogtreecommitdiff
path: root/snippets/group.h
blob: bd183e0478ec8ed991aa603c1479192f6449e0cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma once

#include <functional>
#include <ranges>

template <std::ranges::random_access_range Range>
void group(const Range &v, const std::function<void(int, int)> &fn) {
  int n = v.size();
  for (int i = 0; i < n;) {
    auto i0 = i;
    while (i < n && v[i0] == v[i]) {
      i++;
    }
    fn(i0, i);
  }
}