Код: Выделить всё
#include <iostream>
#include <vector>
// Вспомогательная функция для печати вектора
template<typename T>
void print(std::vector<T> const &v)
{
for (auto &i: v) {
std::cout << i << ' ';
}
std::cout << std::endl;
}
// Разделить vector на подвекторы размера `n` в C++
int main()
{
// входной vector целых чисел
std::vector<int> v = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// разбить vector на подвекторы размером `n` каждый
int n = 4;
// определяем общее количество подвекторов размера `n`
int size = (v.size() - 1) / n + 1;
// создаем массив векторов для хранения подвекторов
std::vector<int> vec[size];
// каждая итерация этого цикла обрабатывает следующий набор `n` элементов
// и сохранить его в векторе по k-му индексу в `vec`
for (int k = 0; k < size; ++k)
{
// получаем диапазон для следующего набора `n` элементов
auto start_itr = std::next(v.cbegin(), k*n);
auto end_itr = std::next(v.cbegin(), k*n + n);
// выделяем память для подвектора
vec[k].resize(n);
// код для обработки последнего подвектора, как мог бы
// содержать меньше элементов
if (k*n + n > v.size())
{
end_itr = v.cend();
vec[k].resize(v.size() - k*n);
}
// копируем элементы из входного диапазона в подвектор
std::copy(start_itr, end_itr, vec[k].begin());
}
// печатаем подвекторы
for (int i = 0; i < size; i++) {
print(vec[i]);
}
return 0;
}