迭代器在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;