aboutsummaryrefslogtreecommitdiffhomepage
path: root/tdutils/td
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2024-11-01 23:22:16 +0300
committerlevlam <levlam@telegram.org>2024-11-01 23:22:16 +0300
commitb3c741ff2e1079d2d7f26329b288df6118421b85 (patch)
tree52e795d4ecffb2c59955db90cf3993c44f37711e /tdutils/td
parent4e5bd36f49203f5a8aeec24b2157605670560cf1 (diff)
Add td::vector_split.
Diffstat (limited to 'tdutils/td')
-rw-r--r--tdutils/td/utils/algorithm.h17
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;