C++ 迭代通过双链表的前面

C++ 迭代通过双链表的前面,c++,list,c++11,iterator,c++-standard-library,C++,List,C++11,Iterator,C++ Standard Library,my_prev的价值是多少? 它是my_list.rend吗,尽管它在技术上是不同的类型? 除了my_iter==my_list.begin之外,如何检查这种情况?根据C++11标准: 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_ite

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

根据C++11标准:

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);
所以,看起来,或者至少我在标准中找不到更相关的部分,这个行为没有定义


我建议您保持这种情况,并在将其传递给std::prev之前小心我的iter值。

相关:您是对的,这是未定义的行为。它恰好适用于某些列表实现,但在任何情况下都不是一个好主意。在调用std::prev之前检查参数是否为!=开始
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;  
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.