Завершено
3
18.09.2018, 12:40
09.10.2018, 10:20
Реализовать собственную версию шаблонной функции copy с ускорением работы для частных случаев.
Шаблонная функция std::copy
реализует простой цикл. При копировании, например, массивов байтов (char
или unsigned char
) процесс будет происходить побайтово. Однако в силу архитектуры памяти и процессора копирование одного байта требует столько же времени, сколько и копирование машинного слова (4 байта для 32-разрядной архитектуры, 8 байт — для 64-разрядной). Функции побайтового копирования из стандартной библиотеки C (memcpy
, memmove
, strcpy
и т.д.) учитывают этот нюанс, и мы могли бы воспользоваться ими.
Возьмите два частных случая:
std::vector
.И при условии, что элемент в принципе допускает побайтовое копирование (для проверки можно воспользоваться is_fundamental), реализуйте вызов memmove
в соответствующих частных специализациях.
Проверьте, что копирование работает корректно, а также то, что частные специализации достаточно ограничены, чтобы не использовать memmove
для более сложных типов данных. Например, для итераторов std::vector<std::string>
мы не можем использовать memmove
. Здесь должен сработать общий алгоритм копирования.