迭代器在std :: list中最后一个元素
#include <list> using std::list; int main() { list <int> n; n.push_back(1); n.push_back(2); n.push_back(3); list <int>::iterator iter = n.begin(); std::advance(iter, n.size() - 1); //iter is set to last element } 还有什么其他的方法可以让列表中的最后一个元素?
是的,你可以从最后一个回去。 (假设你知道列表不是空的。)
 std::list<int>::iterator i = n.end(); --i; 
 下面的任何一个将返回一个std::list<int>::iterator到list的最后一个项目: 
 std::list<int>::iterator iter = n.end(); --iter; 
 std::list<int>::iterator iter = n.end(); std::advance(iter, -1); 
 // C++11 std::list<int>::iterator iter = std::next(n.end(), -1); 
 // C++11 std::list<int>::iterator iter = std::prev(n.end()); 
 以下将返回一个std::list<int>::reverse_iterator到list的最后一个项目: 
 std::list<int>::reverse_iterator iter = std::list::rbegin(); 
使用反向迭代器:
 iter = (++n.rbegin()).base() 
 作为一个方面说明:这个或Charles Bailey方法具有不变的复杂性,而std::advance(iter, n.size() - 1); 与列表具有线性复杂性[因为它具有双向迭代器]。 
  end()并向后走。 
 list <int>::iterator iter = n.end(); cout << *(--iter); 
 std::list<int>::iterator iter = --n.end(); cout << *iter; 
 你可以编写你自己的函数来获得给定的迭代器(当我需要使用std::list “look-behind”和“look-ahead”时,我已经使用了这个函数): 
 template <class Iter> Iter previous(Iter it) { return --it; } 
接着:
 std::list<X>::iterator last = previous(li.end()); 
顺便说一句,这也可能在boost库( 下一个和之前 )中可用。
 list<int>n; list<int>::reverse_iterator it; int j; for(j=1,it=n.rbegin();j<2;j++,it++) cout<<*it;