Разминка для мозгов: циклический сдвиг контейнера.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Задача: циклически сдвинуть последовательный контейнер (некий аналог std::rotate),
например, std::vector, или обычный массив...
1) Для новичков.
a) Интерфейс функции rotate можно сделать любым,
который будет удобен, например,
или как у std::rotate — основанный на итераторах, сути дела не меняет.
Данные, поступающие от вызывающей стороны гарантированно корректны.
2) Задача для чуть более сведущего новичка.
a) Это должен быть шаблон функции
(элементы гарантировано могут копироваться).
b) Вся работа должна происходить с одним контейнером,
т.е. резервировать себе динамическую память
или использовать другие контейнеры
для копирования туда элементов — запрещено.
Использовать дополнительную переменную
на стеке для обмена элементов разрешено.
Также можно использовать std::swap, std::iter_swap и др.
Т.е. упор на реализацию без временного хранилища элементов.
3) Еще чуть усложним.
a) Алгоритм должен работать максимум за линейное время.
b) Возможность сдвигать не только контейнеры,
предоставляющие итераторы произвольного доступа,
но, например, и std::list и std::forward_list,
т.е. функция должна уметь работать
и с однонаправленными итераторами.
Что еще дополнить или что не понятно?
Глухо... ну подождем,
может появятся энтузиасты.
Вот такое решение:
Пункты 1) и 2) — полностью.
Пункт 3а — вроде должен работать за линейное время как я понимаю.
Пункт 3b — не понял.
Там наверное и интерфейс функции будет другим.
И я что-то воткнуть ни как не могу, как должен выглядеть шаблон, который описывает параметр-тип контейнер с параметром-типом, и что бы еще этот тип был доступен в функции. Например, что бы при вызове
в теле шаблонной функции были доступны и тип 'vector', как тип-контейнер, и тип 'int' как тип-элемент этого типа-контейнера. А еще лучше, что бы шаблон инстанцировался по типу первого параметра. Возможно?
А такой вариант вызова:
получится совместить с предыдущим?
У меня с шаблонами пока напряги :(
Кстати, насчет уровня заданий. Меня тут упрекнули, что я заумные решения на вопросы начинающих пишу. Так вот твои задания 2), 3) — явно не для начинающих, тусующихся на этом сайте. Сам видишь, сколько с 17 января было желающих размять мозги.
А где мой пост, который ушел на модерацию?
http://rextester.com/QTJP34905
Не обращайте внимания. Решайте для себя, а не для них.
Забейте на всех, занимайтесь собой, делайте то, что Вам интересно.
А все эти «НИ ТАК НАДА» идут лесом, вместе с лентяями-студентами.
Только в таком случае Вы принесете пользу себе и окружающим.
P.S. Но к конструктивной критике прислушивайтесь, к той,
которая призвана улучшить Ваше решение или подход.