c++ std::list中最后一个元素的迭代器

g52tjvyc  于 2023-01-28  发布在  其他
关注(0)|答案(8)|浏览(546)
#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
}

有没有其他方法可以把iter指向list中的最后一个元素?

1rhkuytd

1rhkuytd1#

是的,你可以从最后往回走一步(假设你“知道”这个列表不是空的)。

std::list<int>::iterator i = n.end();
--i;
aiqt4smr

aiqt4smr2#

执行以下任一操作都会将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();
dced5bon

dced5bon3#

使用反向迭代器:

iter = (++n.rbegin()).base()

作为旁注:这个或CharlesBailey方法具有恒定复杂度,而std::advance(iter, n.size() - 1);具有列表的线性复杂度[因为它具有双向迭代器]。

vwkv1x7d

vwkv1x7d4#

end()为例,向后一步。

list <int>::iterator iter = n.end();
cout << *(--iter);
5lwkijsr

5lwkijsr5#

std::list<int>::iterator iter = --n.end();
cout << *iter;
mjqavswn

mjqavswn6#

您可以编写自己的函数,从给定的迭代器获得前一个(和下一个)迭代器(当我需要对std::list进行"向后看"和"向前看"时,我使用了这个函数):

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

然后:

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

顺便说一句,这也可能在Boost库中可用(Next和Previous)。

khbbv19g

khbbv19g7#

list<int>n;
list<int>::reverse_iterator it;
int j;

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

lf5gs5x28#

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

相关问题