Как 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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