gpt4 book ai didi

c++ - 遍历双向链表的前面

转载 作者:太空宇宙 更新时间:2023-11-04 13:54:57 26 4
gpt4 key购买 nike

std::list<my_type> my_list;
std::list<my_type>::iterator my_iter = my_list.begin();
std::list<my_type>::iterator my_prev = std::prev(my_iter);

my_prev 的值是多少?
它是 my_list.rend(),即使它在技术上是不同的类型?
除了 my_iter == my_list.begin() 之外,如何检查这种情况?

最佳答案

根据 C++11 标准:

24.4.4 Iterator operations [iterator.operations]  
§ 7
template <class BidirectionalIterator>
BidirectionalIterator prev(BidirectionalIterator x,
typename std::iterator_traits<BidirectionalIterator>::difference_type n = 1);
Effects: Equivalent to advance(x, -n); return x;

在同一部分,但 §2 和 §3

template <class InputIterator, class Distance>  
void advance(InputIterator& i, Distance n);
Requires: n shall be negative only for bidirectional and random access iterators.
Effects: Increments (or decrements for negative n) iterator reference i by n.

然后,对于递减双向迭代器:

24.2.6 Bidirectional iterators
Expression Return type Operational Assertion/note
semantics pre-/post-condition

pre: there exists s such that
--r X& r == ++s.
post: r is dereferenceable.
--(++r) == r.
--r == --s implies r == s.
&r == &--r.

因此,看起来(或者至少我无法从标准中找到更多相关部分)未定义此行为。

我建议您在将 my_iter 传递给 std::prev 之前保持这种情况并小心处理它。

关于c++ - 遍历双向链表的前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21937754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com