Адрес отличается, потому что у вас разные объекты.(offEnd - 1)
и r
являются различными объектами.Поскольку они есть, у них разные адреса.Вам нужно разыменовать итератор, а затем получить этот адрес.Это дает вам
int main()
{
std::deque<int> di{ 1, 1, 2, 3, 5, 8, 13 }; // fibonacci series
// deque has bi-directional iterators
std::deque<int>::iterator offEnd = di.end(); // one-past the last element in di
std::deque<int>::reverse_iterator r(offEnd); // constructing a reverse iterator from an iterator from deque<int> di
std::cout << &(*offEnd) << " : " /*<< *r */ << std::endl;
std::cout << &(*(offEnd - 1)) << " : " << *(offEnd - 1) << std::endl;
std::cout << &*r << " : " << *r << std::endl;
}
, который выводит:
0xed3c8c :
0xed3c88 : 13
0xed3c88 : 13
И, как вы можете видеть, адреса одинаковы, поскольку итераторы указывают на один и тот же элемент.
Обратите внимание, что
&(*offEnd)
недопустимо и является неопределенным поведением.В end()
нет объекта, поэтому разыменование прошлого итератора конца незаконно.