Как реализована сортировка для std :: deque?

Не так далеко, я узнал, какstd::deque реализован под капотом и обнаружил, что это что-то вроде массива указателей на n-байтовые массивы, где данные фактически хранятся. Итак, теперь у меня есть пара вопросов, связанных с Deques.

Картина, которая описывает мои текущие знания о его структуре:

Вопросы:

Когдаpush_front выполняется операция, и в блоке данных 0 нет свободного места, новый блок данных выделяется в куче, и указатель на эту вновь выделенную память вставляется в массив «Map», как в обычном массиве - за время O (number_of_blocks) , да?

Как отсортировать этого зверя? Не могу представить ничего лучше, чем скопировать все данные в массив, отсортировать их и затем вернуть обратно. Но этот подход требует O (n) вспомогательной памяти ... Но!std::sort обеспечивает похожий интерфейс для сортировки какstd::vector а такжеstd::deque, Как реализуются разные алгоритмы для разных структур данных? Используете шаблонную специализацию? Если так, то почемуstd::list не может быть отсортировано с помощьюstd::sort? Или, может быть,std::sort не заботится о внутренней структуре этих контейнеров и просто использует итераторы и методы, которые похожи в обоихstd::vector а такжеstd::deque (лайкoperator[], size(), так далее)? Эта идея звучит разумно и ответ на вопрос «почему не можетstd::sort Сортироватьstd::list? »становится очевидным.

Как выбираются размеры блоков данных? Вы скажете«Это зависит от реализации», но, пожалуйста, расскажите подробнее о различных реализациях и мотивации решений.

Нужны уточнения здесь. Благодарю.

Ответы на вопрос(1)

Ваш ответ на вопрос