diff options
| author | levlam <levlam@telegram.org> | 2024-11-01 23:22:16 +0300 |
|---|---|---|
| committer | levlam <levlam@telegram.org> | 2024-11-01 23:22:16 +0300 |
| commit | b3c741ff2e1079d2d7f26329b288df6118421b85 (patch) | |
| tree | 52e795d4ecffb2c59955db90cf3993c44f37711e /tdutils/td | |
| parent | 4e5bd36f49203f5a8aeec24b2157605670560cf1 (diff) | |
Add td::vector_split.
Diffstat (limited to 'tdutils/td')
| -rw-r--r-- | tdutils/td/utils/algorithm.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/tdutils/td/utils/algorithm.h b/tdutils/td/utils/algorithm.h index 7046c8e65..7aea70d9b 100644 --- a/tdutils/td/utils/algorithm.h +++ b/tdutils/td/utils/algorithm.h @@ -46,6 +46,23 @@ auto transform(V &&v, const Func &f) { return detail::transform_helper<std::decay_t<V>>().transform(std::forward<V>(v), f); } +template <class T> +vector<vector<T>> vector_split(vector<T> &&v, std::size_t size) { + CHECK(size != 0); + vector<vector<T>> result((v.size() + size - 1) / size); + if (result.size() <= 1) { + if (!result.empty()) { + result[0] = std::move(v); + } + return result; + } + for (size_t i = 0; i + 1 < result.size(); i++) { + result[i] = vector<T>(v.begin() + i * size, v.begin() + (i + 1) * size); + } + result.back() = vector<T>(v.begin() + (result.size() - 1) * size, v.end()); + return result; +} + template <class V, class Func> bool remove_if(V &v, const Func &f) { size_t i = 0; |
