Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > std::list: вывести элементы в обратном порядке


Автор: Alca 5.2.2010, 14:45
Т.е. я хочу пройтись по списку с конца:
Код

VOID main() {
    std::list<int> mylist;
    std::list<int>::iterator it;

    mylist.push_back (100);
    mylist.push_back (200);
    mylist.push_back (300);

    std::cout << "mylist contains:";
    for (it=mylist.begin(); it!=mylist.end(); ++it)
        std::cout << " " << *it;


    std::cout << "mylist contains:";
    for (it=mylist.end(); it!=mylist.begin(); --it)
        std::cout << " " << *it;   //эссертиться - Expression: list iterator not dereferencable

    std::cout << std::endl;
    system("pause");

    return;
}



Автор: NewDima 5.2.2010, 14:47
mylist.end()  "указывает" на элемент, находящийся непосредственно после последнего, на несуществующий

Автор: Lazin 5.2.2010, 14:49
Alca, задав такое количество вопросов на форуме, мог-бы и запомнить, что container.end() - итератор, указывающий на следующий после последнего элемент конетйнера и его нельзя дереференсить
в данном случае можно использовать rbegin, rend

Код

for (it=mylist.rbegin(); it!=mylist.rend(); ++it)
        std::cout << " " << *it;

Автор: NewDima 5.2.2010, 14:54
Код

std::list<int>::reverse_iterator it;
for (it=mylist.rbegin(); it!=mylist.rend(); ++it)
        std::cout << " " << *it;


upd
опередили

Автор: Alca 5.2.2010, 14:56
Цитата

что container.end() - итератор, указывающий на следующий после последнего элемент конетйнера и его нельзя дереференсить

про это я знаю
Код

for (it=mylist.rbegin(); it!=mylist.rend(); ++it)
        std::cout << " " << *it;

Код

Error    1    error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::reverse_iterator<_RanIt>' (or there is no acceptable conversion)
Error    2    error C2678: binary '!=' : no operator found which takes a left-hand operand of type 'std::list<_Ty>::_Iterator<_Secure_validation>' (or there is no acceptable conversion)


Автор: azesmcar 5.2.2010, 14:58
Alca

замени std::list<int>::iterator it на std::list<int>::reverse_iterator it. И вообще это задача вот так решается
Код

std::copy(mylist.rbegin(), mylist.rend(), std::ostream_iterator<int>(std::cout, " "));

Автор: Alca 5.2.2010, 14:58
Разобрался:
Код

    std::list<int>::reverse_iterator  rit;


Добавлено через 42 секунды
Спасибо.

Автор: mrbrooks 5.2.2010, 14:59
Alca, можно еще и так:

Код

    std::copy(list.begin(),list.end(),std::ostream_iterator<int>(std::cout,"\n"));
    std::copy(list.rbegin(),list.rend(),std::ostream_iterator<int>(std::cout,"\n"));

и еще много как. главное почитать про stl  smile 

Автор: Alca 5.2.2010, 14:59
Цитата

Lazin, Alca, задав такое количество вопросов на форуме, мог-бы и запомнить

Не все же профи, надо же кому-то тупануть.

Автор: mrbrooks 5.2.2010, 15:00
зы list - это std::list<int>list - как бэ аналог mylist

Автор: azesmcar 5.2.2010, 15:00
Цитата(mrbrooks @  5.2.2010,  14:59 Найти цитируемый пост)
и еще много как. главное почитать про stl  smile  

опередил smile 

Автор: mrbrooks 5.2.2010, 15:01
Цитата(Alca @  5.2.2010,  14:59 Найти цитируемый пост)
Не все же профи, надо же кому-то тупануть. 

эм. только не говори что ты поднимаешь вопросы в разделе WinAPI даже по диагонали не прочитав Рихтера?  smile 

Автор: Alca 5.2.2010, 15:06
mrbrooks, ты про семафоры?  smile 

Автор: Lazin 5.2.2010, 15:09
Цитата(Alca @  5.2.2010,  14:59 Найти цитируемый пост)
Не все же профи, надо же кому-то тупануть.

просто ты задаешь довольно много похожих вопросов, у меня складывается впечатление, что ты хочешь не разобраться с проблемой, а получить готовое решение, поэтому, одинаковые вопросы возникают снова и снова

Автор: Alca 5.2.2010, 15:10
mrbrooks, Lazin, так ставьте минуса.

Добавлено через 1 минуту и 8 секунд
По-вашему я сижу и смотрю фильмы?

Автор: azesmcar 5.2.2010, 15:16
Alca

Я думаю Lazin имеет ввиду что стоит почитать литературу и я с ним полностью согласен. Дело не в том, что лень отвечать на вопросы, кому лень тот не ответит, польза от этого будет только тебе. Для решения этого вопроса нужны примитивные базовые сведения об STL. Они описаны в каждой книге. Почитай, сэкономишь время себе.

Автор: Lazin 5.2.2010, 15:18
отставить праведный гнев smile

сам подумай, судя по твоим постам, ты используешь stl - давно, но судя по этой теме - не знаешь что возвращает std::list<..>::end, а так-же не знаешь о существовании reverse_iterator-a
а ведь достаточно зайти на cplusplus.com и почитать описание шаблона std::list

Добавлено через 1 минуту и 58 секунд
http://www.cplusplus.com/reference/stl/list/

есть еще книги по STL

Автор: Alca 5.2.2010, 15:20
Цитата

Я думаю Lazin имеет ввиду что стоит почитать литературу

Читаю. Ну не обращял я внимания на реверсивные итераторы, но что поделать. Лучше спросить, чем боятся того, что о тебе подумают.
Я постоянно учусь. Был бы я на этом форуме?  smile 

Автор: mrbrooks 5.2.2010, 15:21
Цитата(Alca @  5.2.2010,  15:10 Найти цитируемый пост)
так ставьте минуса.

а вот и не дождетесь батенька  smile а будите упорствовать - вообще заплюсуем  smile 

Автор: Lazin 5.2.2010, 15:22
Цитата(Alca @  5.2.2010,  15:20 Найти цитируемый пост)
Читаю. Ну не обращял я внимания на реверсивные итераторы, но что поделать. Лучше спросить, чем боятся того, что о тебе подумают.
Я постоянно учусь. Был бы я на этом форуме?

ну вот и отлично smile 

Автор: Alca 5.2.2010, 15:23
P.S. еще я не знаю, что-такое ВВ

Автор: mrbrooks 5.2.2010, 15:23

Цитата(Alca @  5.2.2010,  15:20 Найти цитируемый пост)
Читаю. Ну не обращял я внимания на реверсивные итераторы, но что поделать. Лучше спросить, чем боятся того, что о тебе подумают.
Я постоянно учусь. Был бы я на этом форуме?

не верю, что ты не знаешь про http://cplusplus.com/reference/stl/list/, камрад.

Автор: Alca 5.2.2010, 15:29
mrbrooks, и правильно делаешь.
Пацаны, простите! Недоклацал я до list::rbegin.
 smile 

Автор: azesmcar 5.2.2010, 15:30
Цитата(Alca @  5.2.2010,  15:23 Найти цитируемый пост)
P.S. еще я не знаю, что-такое ВВ

BodyBuidling?

Автор: Alca 5.2.2010, 15:31
Цитата

BodyBuidling?

И это тоже.
---
ВВ - Взрывчатые вещества  smile 

Автор: azesmcar 5.2.2010, 15:40
Цитата(Alca @  5.2.2010,  15:31 Найти цитируемый пост)
ВВ - Взрывчатые вещества  smile 

Владимир Высоцкий, Владимир Вольфович, Владимир Владимирович...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)