Задача A. Slicer

Входной файл:Стандартный вход   Ограничение времени:1 сек
Выходной файл:Стандартный выход   Ограничение памяти:4000 Мб

Условие

В этой задаче нужно разработать шаблон Slicer, который разбивает содержимое контейнера на несколько страниц.

Пример, когда такое может пригодиться, — распределение списка приложений по экранам телефона. На вход функции поступает вектор приложений, и нам нужно разбить этот вектор по страницам фиксированного размера. Сделать это можно было бы таким кодом:

          

vector<vector<Application>> DistributeAmongScreens(const vector<Application>& apps) {
  vector<vector<Application>> result;
  for (const auto& page : Slice(apps, 20)) {
    result.push_back({page.begin(), page.end()});
  }
  // result[0] -- все приложения, которые попадают на первый экран
  // result[1] -- все приложения, которые попадают на второй экран
  // и т.д.
  return result;
}

          
      

Класс Slicer должен обладать следующими свойствами:

Кроме того разработайте шаблонную функцию Slice, которая принимает ссылку на контейнер и размер страницы, и возвращает объект класса Slicer<It>.

Материалы задачи

main.cpp

solution_template.h


0.081s 0.016s 17