Почему очередь std не определяет специализацию метода подкачки - PullRequest
4 голосов
/ 02 июня 2009

Я читал, что все контейнеры stl обеспечивают специализацию алгоритма подкачки, чтобы избежать вызова конструктора копирования и двух операций присваивания, которые использует метод по умолчанию. Однако, когда я подумал, что было бы неплохо использовать очередь в некотором коде, над которым я работал, я заметил, что (в отличие от вектора и deque) очередь не предоставляет этот метод? Я просто решил использовать deque вместо очереди, но все же мне интересно узнать, почему это так?

Ответы [ 2 ]

3 голосов
/ 02 июня 2009

C ++ 0x добавит своп к контейнерам-адаптерам, таким как std :: queue. Я мог только размышлять, почему это отсутствует в текущем стандарте. В этом обсуждении кто-то предлагает обходной путь:

Существует решение, поскольку стандарт защищает необходимые детали, называется наследство. [только не разрушайте через адаптеры STD] создайте шаблонную структуру, наследующую нужный адаптер, предоставьте только конструкторы и направить аргументы в класс адаптера, написав элемент swap очень прост, так как необходимые элементы являются стандартные адаптеры.

1 голос
/ 02 июня 2009

Я уверен, что они были опущены как оплошность. Честно говоря, я использую std :: queue и std :: stack совсем немного, и мне никогда не приходилось менять местами два. Я думаю, что вы используете deque вместо очереди в порядке. Что-то вроде typedef std::deque<MyType> QueueType должно дать достаточно подсказки, как использовать контейнер.

...