template
class Stack {
T arr[SIZE];
size_t pos = 0;
public:
T pop() {
return arr[--pos];
}
Stack& push(const T& t) {
arr[pos++] = t;
return *this;
}
auto begin() {
return std::reverse_iterator(arr+pos);
}
auto end() {
return std::reverse_iterator(arr);
// ^ does reverse_iterator take this `one back`? how?
}
};
int main() {
Stack s;
s.push(5).push(15).push(25).push(35);
for(int val: s) {
std::cout в качестве адаптера для другого итератора, недавно адаптированный end < /em> должен быть один Перед оригиналом begin . Однако вызов std :: prev
on begin - это ub.
Как std :: reverse_iterator удерживает один перед началом?
Это пример кода с использованием std :: reample_iterator : [code]template class Stack { T arr[SIZE]; size_t pos = 0; public: T pop() { return arr[--pos]; } Stack& push(const T& t) { arr[pos++] = t; return *this; } auto begin() { return std::reverse_iterator(arr+pos); } auto end() { return std::reverse_iterator(arr); // ^ does reverse_iterator take this `one back`? how? } };
int main() { Stack s; s.push(5).push(15).push(25).push(35); for(int val: s) { std::cout в качестве адаптера для другого итератора, недавно адаптированный end < /em> должен быть один Перед оригиналом begin . Однако вызов std :: prev [/code] on begin - это ub. Как std :: reverse_iterator удерживает один перед началом?