Существуют ли в C++ «функции массового перемещения», которые избегают множественных назначений перемещения, точно так же, как std::memmove избегает множественных назначений копирования?

Я читал о std::copy на cppreference, и они говорят, что большинство стандартных библиотек будут использовать std::memmove, если у вас есть непрерывный диапазон и элементы можно легко скопировать. Очевидно, это намного быстрее, чем копирование элементов одно за другим, поскольку, по словам Стефана Т. Лавейжа (разработчика STL), вы можете просто скопировать всю меморицию «одним взрывом».

Допустим, у меня есть диапазон, который соответствует тем же требованиям, например std::vector<int>, и я хочу переместить свой диапазон в другой std::vector<int> с помощью std::ranges::move. Этот алгоритм перемещает элементы один за другим или выполняет ту же проверку, что и std::copy, и перемещает все за одну операцию? Есть ли какая-нибудь функция, аналогичная std::memmove, которая делает это? Если нет, будет ли полезна такая функция?

Для тривиально копируемых типов std::copy вероятно использует std::memmove.

Eljay 16.05.2024 01:01

@Eljay Да, это то, что я сказал. Что ты имеешь в виду?

TwistedBlizzard 16.05.2024 01:04

На практике для тривиально копируемых элементов std::copy(), вероятно, будет использовать std::memmove() (переместить все «одним взрывом») - но это зависит (на самом деле это проблема качества реализации, а не закона природы). Тем не менее, было бы несложно написать код (специализироваться std::copy() на тривиально копируемых типах), поэтому я был бы удивлен, если бы качественная реализация стандартной библиотеки (она больше не называется STL, кстати - вам всего 20 лет или около того) устаревший в номенклатуре) сделал бы что-нибудь другое.

Peter 16.05.2024 01:06

Да, это то, что я сказал. Что ты имеешь в виду? Ааа, ну тогда я не понимаю, почему вы тогда задаете этот вопрос. Все хорошо.

Eljay 16.05.2024 01:18

@user4581301 user4581301 Похоже, он был предназначен для этой работы.

Retired Ninja 16.05.2024 01:19

@ user4581301 он фактически изменил свое второе имя на Томас, чтобы его инициалы были STL. Источник: cppcast

TwistedBlizzard 16.05.2024 01:21

Это делает его смешнее.

user4581301 16.05.2024 01:22
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если тип тривиально копируем, то перемещение и копирование — это одна и та же операция. Различие необходимо проводить только для нетривиально копируемых типов. Учитывая непрерывный диапазон тривиально копируемых типов, алгоритму std::move разрешено использовать std::memmove в своей реализации.

Другие вопросы по теме