Я делаю некоторые проблемы HackerRank для новичков в C++, и я нахожу, что, кажется, существует несколько способов решения этой проблемы, и мне интересно, какой путь наиболее широко используется и/или наиболее эффективен. Задача требует создания класса, который содержит как переменные stack
, так и queue
, а также stack_push
/stack_pop
и queue_push
/queue_pop
функции для них.Какая структура данных лучше всего подходит для базовых стеков и очередей на C++?
Из того, что я гугле, кажется, я мог бы использовать либо std::vector
, std::stack
и std::queue
или std::deque
, и, возможно, другие.
Я не уверен, как определить, какой из них лучше всего использовать. Какие-либо предложения?
EDIT: я реализовал с помощью std::vector
для обоих, а затем с помощью std::stack
вместе с std::queue
и я видел точно такую же производительность с как для небольшого иш теста. EDIT2: С гораздо большим тестовым случаем это выглядит как std:stack
/std:queue
превосходит std:vector
. Я предполагаю, что это из-за того, что половина очереди FIFO не эффективна с вектором, но мне нужно будет это проверить.
Всегда используйте 'std :: vector'. –
всегда? почему это? – Austin
'std :: stack' и' std :: queue' не являются контейнерами как таковыми, они берут базовый контейнер, как правило, 'std :: vector'. – 101010