Входной файл: | Стандартный вход | Ограничение времени: | 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>.