Задание № 162

Студент

Иванов Андрей

Задача

Оптимизированный copy

Состояние

Завершено

Баллов

3

Дедлайн
25 февраля 2015
Назначено

16.02.2015, 09:08

Завершено

25.02.2015, 13:47

Реализовать собственную версию шаблонной функции copy с ускорением работы для частных случаев.

Мотивация

Шаблонная функция std::copy реализует простой цикл. При копировании, например, массивов байтов (char или unsigned char) процесс будет происходить побайтово. Однако в силу архитектуры памяти и процессора копирование одного байта требует столько же времени, сколько и копирование машинного слова (4 байта для 32-разрядной архитектуры, 8 байт — для 64-разрядной). Функции побайтового копирования из стандартной библиотеки C (memcpy, memmove, strcpy и т.д.) учитывают этот нюанс, и мы могли бы воспользоваться ими.

Описание задачи

Возьмите два частных случая:

  1. Итераторы являются указателями.
  2. Итераторы относятся к std::vector.

И при условии, что элемент в принципе допускает побайтовое копирование (для проверки можно воспользоваться is_fundamental), реализуйте вызов memmove в соответствующих частных специализациях.

Тестирование

Проверьте, что копирование работает корректно, а также то, что частные специализации достаточно ограничены, чтобы не использовать memmove для более сложных типов данных. Например, для итераторов std::vector<std::string> мы не можем использовать memmove. Здесь должен сработать общий алгоритм копирования.

Действия