контейнер очереди c ++ - PullRequest
0 голосов
/ 16 января 2012

У меня проблема с очередями в моей программе.Имея одну очередь, я хотел бы использовать эту очередь, только с другим идентификатором.Вот что у меня сейчас:

queue<R> queue;
queue<R> queue2;
...
while (! queue2.empty() )
{
  R r = queue2.front();
  queue2.pop();
  queue.push(r);
}

Но это линейно.Я надеюсь, что это можно сделать за O (1) раз.Я пытался использовать ссылки, но мне не удалось.

Ответы [ 2 ]

2 голосов
/ 16 января 2012

Вы не сказали нам, как "потерпели неудачу", но ссылки действительно просты :

std::queue<R> queue;
std::queue<R>& queue2 = queue;

Работа выполнена.

2 голосов
/ 16 января 2012

Вы можете использовать бесплатную функцию std::swap:

std::queue<R> queue2;
std::swap(queue1, queue2);

Это просто вызывает swap для нижележащего контейнера, поэтому оно должно быть довольно эффективным.

(По словам Джона связанный вопрос Zwinck , это новая возможность C ++ 11, поэтому старые компиляторы могут отклонить это или иметь неэффективную реализацию.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...