Chunk a std::vector into fixed-size batches

C++
#include <algorithm>
#include <cstddef>
#include <vector>

template <class T>
std::vector<std::vector<T>> chunk(const std::vector<T>& src, std::size_t n) {
    std::vector<std::vector<T>> out;
    if (n == 0) return out;
    out.reserve((src.size() + n - 1) / n);
    for (std::size_t i = 0; i < src.size(); i += n) {
        auto end = std::min(i + n, src.size());
        out.emplace_back(src.begin() + i, src.begin() + end);
    }
    return out;
}