У меня возникли проблемы с поиском хорошего ответа на этот вопрос. По какой-то причине я думал, что сортировка STL будет реализована с использованием swap для лучшей поддержки сложных типов, но, поскольку я в конечном итоге копал код, кажется, что он фактически выполняет двоичную копию. Может кто-то подтвердить это? Я предполагаю, что бинарная копия будет предпочтительнее поменять местами.
Боковой вопрос: реализованы ли какие-либо из алгоритмов STL или контейнерных операций с помощью swap? (Вне 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. Поэтому мой вопрос - это сортировка вызовов, копирование и т.д.