繁体   English   中英

指向 std::list 中最后一个元素的迭代器

[英]Iterator to last element in 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;
list<int>n;
list<int>::reverse_iterator it;
int j;

for(j=1,it=n.rbegin();j<2;j++,it++)
cout<<*it;

您可以编写自己的函数来从给定的函数中获取前一个(和下一个)迭代器(当我需要“look-behind”和“使用std::list ”时,我已经使用过它):

template <class Iter>
Iter previous(Iter it)
{
    return --it;
}

然后:

std::list<X>::iterator last = previous(li.end());

顺便说一句,这也可以在boost库中使用( 下一个和之前的 )。

或者可以只使用 back() 指向最后一个元素:n.back();-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM