Итератор для длительности элемента в станд.:: список

#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
}

там какой-либо другой путь состоит в том, чтобы иметь проход к последнему элементу в списке?

51
задан cpx 20 April 2010 в 08:52
поделиться

5 ответов

Да, вы можете вернуться назад с конца. (Предполагая, что вы знаете , что список не пустой.)

std::list<int>::iterator i = n.end();
--i;
89
ответ дан 7 November 2019 в 09:44
поделиться

С обратными итераторами:

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

В качестве примечания: этот метод или метод Чарльза Бейли имеют постоянную сложность, в то время как std :: advance (iter, n.size () - 1); имеет линейную сложность с список [поскольку он имеет двунаправленные итераторы].

10
ответ дан 7 November 2019 в 09:44
поделиться

Вы можете написать свои собственные функции для получения предыдущего (и следующего) итератора из заданного (который я использовал, когда мне нужно было «смотреть назад» и «смотреть вперед» с std: : list ):

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

И затем:

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

Кстати, это также может быть доступно в библиотеке ускорения ( next и previous ).

1
ответ дан 7 November 2019 в 09:44
поделиться

Возьмите конец () и пройдите назад.

list <int>::iterator iter = n.end();
cout << *(--iter);
6
ответ дан 7 November 2019 в 09:44
поделиться

Любой из следующих вариантов вернет std :: list :: iterator к последнему элементу в списке :

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 :: reverse_iterator к последнему элементу в списке :

std::list<int>::reverse_iterator iter = std::list::rbegin();
59
ответ дан 7 November 2019 в 09:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: