Построить очередь из очередей без использования STL - PullRequest
0 голосов
/ 20 февраля 2011

Я пытаюсь создать очередь из очередей, которые я могу использовать для управления несколькими наборами данных, но я не уверен, как это сделать. Просто деларинг queue<queue> не работает и возвращает следующую ошибку:

error: type/value mismatch at argument 1 in template parameter list for ‘template<class Type> class queue’
main.cpp:18: error:   expected a type, got ‘queue’
main.cpp:18: error: invalid type in declaration before ‘;’ token
make: *** [main.o] Error 1

Можно ли вообще реализовать такую ​​структуру данных, и если да, то как мне это сделать?

Примечание : Это назначение класса, в котором мы должны сами кодировать очередь, а не использовать Стандартную библиотеку шаблонов.

Ответы [ 3 ]

5 голосов
/ 20 февраля 2011

Очередь должна иметь тип. Вы создаете очередь из очередей .... ничего. Поэтому он читает токен queue внутри < и > как ошибку, а не тип. queue это не тип, технически. queue<int> это тип.

Вы хотите написать свой собственный класс очереди или свою собственную очередь? Я бы посоветовал написать свой собственный шаблонный класс очереди ... а затем создать экземпляр этого шаблона с самим собой в качестве типа значения.

Очередь из очередей int с? queue< queue<int> >. Будь то очередь STL или ваша собственная очередь.

ПРИМЕЧАНИЕ. Важно, чтобы при использовании типа шаблона в качестве параметров другого шаблона вы должны были ставить пробелы вокруг него. Это связано с тем, что >> в queue<queue<int>> интерпретируется как оператор >> из-за правила "Maximal Munch" при разборе. Совершенно несвязанная заметка, пишущая очередь слов, которая много раз начинает мешать твоим глазам ...

1 голос
/ 20 февраля 2011

Особая ошибка, которую вы получаете, заключается в том, что очередь является классом шаблона, поэтому вам нужно указывать аргумент для него везде, где вы его используете.Таким образом, запись

queue<queue>

недопустима, поскольку внутренняя очередь не параметризуется ни для чего.

Определенно возможно написать собственную очередь очередей - фактически, можно написать любую изклассы контейнеров STL - но начинать с использования очереди - неправильный способ сделать это.Если вы хотите создать очередь из очередей, начните с размышлений о том, как сделать простую очередь.Какую реализацию вы бы использовали?Как бы вы отслеживали количество элементов?Будет ли работать динамический массив?Как насчет связанного списка, хеш-таблицы или дерева двоичного поиска?У каждой структуры есть свои плюсы и минусы, поэтому обязательно подумайте, прежде чем начинать.

Как только у вас будет хорошая реализация очереди, вы можете параметризовать ее, чтобы сделать свою очередь шаблоном, из которого вы легко сможетесделать очередь из очередей.

Надеюсь, это поможет, и удачи!

0 голосов
/ 20 февраля 2011

Вам необходимо определить тип второй очереди, например, queue<queue<int> >, чтобы иметь очередь из целых очередей.

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