У меня проблемы с поиском хорошего ответа на это.По какой-то причине я думал, что сортировка STL будет реализована с использованием swap для лучшей поддержки сложных типов, но, поскольку я немного копался в коде, оказалось, что он на самом деле делает двоичные копии.Кто-нибудь может это подтвердить?Я предполагаю, что двоичное копирование на самом деле предпочтительнее, чем подкачка.
Дополнительный вопрос : Какие-нибудь алгоритмы STL или контейнерные операции реализованы с использованием подкачки?(Очевидно, за пределами std::swap
.) Я хочу знать, когда разумно реализовать собственный своп для сложных типов.
Редактировать: Я спрашиваю причину, если у вас есть что-то вроде:
class MyClass {
vector<int> vec_data;
int a;
int b;
}
vector<MyClass> my_vec;
sort(my_vec.begin(), my_vec.end(), MyCustomCompare);
Я хочу убедиться, что сортировка не вызывает конструктор копирования вектора, что произошло бы, если бы вы вызвали конструктор копирования по умолчанию MyData.Следовательно, мой вопрос - сортировка, вызывающая обмен, копирование и т. Д.?