【发布时间】:2020-01-21 21:48:56
【问题描述】:
在https://en.cppreference.com/w/cpp/iterator/reverse_iterator 上说:
std::reverse_iterator是一个迭代器适配器,它可以反转给定迭代器的方向。换句话说,当提供双向迭代器时,std::reverse_iterator会生成一个新迭代器,该迭代器会从底层双向迭代器定义的序列的末尾移动到开头。对于从迭代器
i构造的反向迭代器r,关系&*r == &*(i-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;
}
输出:
0023FDAC :
0023FC9C : 13
0048C608 : 13
为什么迭代器的值相同但地址不同???!!!
这是否意味着&*r == &*(i-1) 不正确?
【问题讨论】:
-
std::cout << &(offEnd - 1) << " : " << *(offEnd - 1) << std::endl;是做什么的那你有答案了吗? -
您对链接文章的引用略有不同。在链接中,您会找到
&*r == &*(i-1),而不是您帖子中的内容。
标签: c++ reverse-iterator