Я пытаюсь использовать 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> >’
Мне нужно в структуре как: первое прибывает, первое уходит.
std::deque
поддерживает эффективную вставку и удаление в начале и конце структуры данных. Вы можете выполнять операции с очередью вручную, используя push_back
и pop_front
.
По умолчанию очередь использует deque. Это обертка, которая раскрывает только операции с очередью (поэтому вы не можете выполнять итерации над ней). Я задавал похожий вопрос некоторое время назад, и лучший ответ дал мне хорошее понимание реального использования std::queue
. Нужно использовать std::queue
не потому, что нужна очередь, а для того, чтобы было ясно, что только операции, подобные очереди, законны для данной структуры данных. Похоже, что вам нужно больше свободы, так что выбирайте deque, list или какую-нибудь другую структуру с O(1) insert и remove на обоих концах.
std::queue
- это адаптер контейнера. Он использует std::deque
в качестве базового контейнера по умолчанию. Доступ к этому контейнеру невозможен, и поэтому он никак не является итерационным.
Лучший способ - использовать std::deque
или std::list
и управлять поведением очереди самостоятельно. Возможно, создать собственную обертку вокруг нее.
вы можете использовать std :: list с push_front и pop_back