Итерация через очередь станд.

Я пытаюсь использовать BOOST_FOREACH для итерации через станд.:: очередь. Но нет итераторов в той причине класса, у меня есть ошибка:

std::queue<std::string> someList;
BOOST_FOREACH(std::string temp, someList)
{
   std::cout << temp;
}

>no matching function for call to begin(...)
>no type named ‘iterator’ in ‘class std::queue<std::basic_string<char> >’

Мне нужно в структуре как: первое прибывает, первое уходит.

8
задан Max Frai 1 June 2010 в 14:16
поделиться

3 ответа

std::deque поддерживает эффективную вставку и удаление в начале и конце структуры данных. Вы можете выполнять операции с очередью вручную, используя push_back и pop_front.

По умолчанию очередь использует deque. Это обертка, которая раскрывает только операции с очередью (поэтому вы не можете выполнять итерации над ней). Я задавал похожий вопрос некоторое время назад, и лучший ответ дал мне хорошее понимание реального использования std::queue. Нужно использовать std::queue не потому, что нужна очередь, а для того, чтобы было ясно, что только операции, подобные очереди, законны для данной структуры данных. Похоже, что вам нужно больше свободы, так что выбирайте deque, list или какую-нибудь другую структуру с O(1) insert и remove на обоих концах.

19
ответ дан 5 December 2019 в 06:52
поделиться

std::queue - это адаптер контейнера. Он использует std::deque в качестве базового контейнера по умолчанию. Доступ к этому контейнеру невозможен, и поэтому он никак не является итерационным.

Лучший способ - использовать std::deque или std::list и управлять поведением очереди самостоятельно. Возможно, создать собственную обертку вокруг нее.

1
ответ дан 5 December 2019 в 06:52
поделиться

вы можете использовать std :: list с push_front и pop_back

4
ответ дан 5 December 2019 в 06:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: