#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
}
有没有其他方法可以让列表中的最后一个元素显示出来?
答案 0 :(得分:88)
是的,你可以从最后回来。 (假设您知道该列表不为空。)
std::list<int>::iterator i = n.end();
--i;
答案 1 :(得分:54)
以下任何一项都会将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();
答案 2 :(得分:9)
使用反向迭代器:
iter = (++n.rbegin()).base()
作为旁注:这个或Charles Bailey方法具有恒定的复杂性,而std::advance(iter, n.size() - 1);
具有列表的线性复杂性[因为它具有双向迭代器]。
答案 3 :(得分:6)
取end()
然后向前走。
list <int>::iterator iter = n.end();
cout << *(--iter);
答案 4 :(得分:5)
std::list<int>::iterator iter = --n.end();
cout << *iter;
答案 5 :(得分:1)
您可以编写自己的函数来获取给定的迭代器(当我需要“look-behind”时使用的迭代器和使用std::list
的“预见”时使用的迭代器):
template <class Iter>
Iter previous(Iter it)
{
return --it;
}
然后:
std::list<X>::iterator last = previous(li.end());
顺便说一句,这也可以在boost库中使用(next and prior)。
答案 6 :(得分:1)
list<int>n;
list<int>::reverse_iterator it;
int j;
for(j=1,it=n.rbegin();j<2;j++,it++)
cout<<*it;