C++ stack
не поддерживает произвольный доступ, так что нет никакого прямого способа использования stack
, чтобы проверить, если элемент содержится. Тем не менее, вы можете сделать копию стека, а затем непрерывно pop
с этого стека, пока элемент не будет найден.
В качестве альтернативы, если вам нужно найти stack
, вы можете вместо этого использовать deque
, который поддерживает произвольный доступ. Например, вы могли бы использовать алгоритм find
на deque
для поиска элемента:
find(myDeque.begin(), myDeque.end(), myValue);
Если вам нужны частые поисковые запросы на stack
, рассмотрит ведение параллельного set
вместе с stack
, которая хранит те же элементы, что и stack
. Таким образом, вы можете просто использовать set::find
, чтобы проверить (эффективно), существует ли элемент.
Надеюсь, это поможет!
Могу ли я спросить, почему вы используете стек и не устанавливаете? – Maciek
Невозможно выполнить итерацию/поиск в 'std :: stack', вам разрешено просматривать последний элемент и выталкивать его. Возможно, вам нужен другой контейнер. – birryree
Если вы хотите посмотреть на все элементы, вам, вероятно, не нужен стек. –