Ты спрашиваешь
Предоставляет ли std :: stack итераторы?
Многие люди давали ответы. Если бы мой английский был лучше, я мог бы также понять точное значение «разоблачить».
Если мы ссылаемся на STL и класс std :: stack и предопределенные функции, определенные здесь, ответ НЕТ.
Я думаю, что вы спрашиваете, потому что вы хотите иметь итераторы.
Итак, если мы пойдем еще дальше, у нас есть функция top (). И top () можно интерпретировать как разыменованный итератор. Благодаря этому мы можем легко определить итераторы для элементов стека. Память стека гарантированно будет смежной.
см. Ниже. Мы определяем и используем итераторы для std :: copy:
#include <vector>
#include <stack>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <sstream>
using Number = int;
using UnderlyingContainer = std::vector<Number>;
using Stack = std::stack< Number, UnderlyingContainer>;
using StackIterator = const Number *;
std::istringstream testData("5 8 1 4 9 3");
int main()
{
// Put the test data onto the stack
Stack stack{ UnderlyingContainer {std::istream_iterator<Number>(testData),std::istream_iterator<Number>()} };
// Print the test data
// Get iterators
StackIterator end = &stack.top() + 1;
StackIterator begin = end - stack.size();
if (not stack.empty())
std::copy(begin, end, std::ostream_iterator<Number>(std::cout, "\n"));
return 0;
}
Так что вы можете создавать итераторы для стека. Но, предостережение:
std :: stack намеренно скрывает свои элементы под колпаком. Итак, если вы получите доступ к данным для записи, я бы посчитал это ошибкой проекта. Доступ для чтения через константные указатели / итераторы для меня в порядке. Но, возможно, вам лучше использовать std :: vector. , .