Как std :: reample_iterator удерживает один перед началом?C++

Программы на C++. Форум разработчиков
Anonymous
Как std :: reample_iterator удерживает один перед началом?

Сообщение Anonymous »

Это пример кода с использованием std :: reample_iterator :

Код: Выделить всё

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 удерживает один перед началом?

Подробнее здесь: https://stackoverflow.com/questions/676 ... fore-begin

Вернуться в «C++»