Я читал, что все контейнеры stl предоставляют специализацию алгоритма подкачки, чтобы избежать вызова конструктора копирования и двух операций присваивания, которые использует метод по умолчанию. Однако, когда я подумал, что было бы неплохо использовать очередь в каком-то коде, над которым я работал, я заметил, что (в отличие от vector и deque) очередь не предоставляет этот метод? Я просто решил использовать deque вместо очереди, но все же мне интересно узнать, почему это так?
Почему стандартная очередь не определяет специализацию метода подкачки
Ответы (2)
C++0x добавит переключитесь на адаптеры контейнеров, такие как std::queue. Я мог только догадываться, почему он отсутствует в текущем стандарте. В этом обсуждении кто-то предлагает обходной путь:
Решение есть, поскольку стандарт делает необходимые части защищенными, что называется наследованием. [просто не разрушайте через стандартные адаптеры] создайте шаблонную структуру, наследующую нужный адаптер, предоставьте только конструкторы и перенаправьте аргументы в класс адаптера, запись элемента подкачки - это несложно, поскольку требуемые элементы являются защищенными членами стандарта адаптеры.
Я уверен, что они были опущены по недосмотру. Честно говоря, я довольно часто использую std::queue и std::stack, и мне никогда не приходилось менять их местами. Я думаю, что вы используете deque вместо очереди. Что-то вроде typedef std::deque<MyType> QueueType
должно дать достаточно подсказки, как следует использовать контейнер.