Tworzenie listy i naprzemienne wyświetlanie jej

0

mam takie zadanie 'Wypisz na przemian elementy od końca i początku'.

Kod nie wykonuje się do końca. Wypisuje dobrze elementy po czym nagle się przerywa.
dla listy 0 1 2 3 4 5 6 7 8 9

pokazuje

9
0
8
1
7
2
6

i tutaj automatycznie się zamyka. Nie ma żadnych błędów na liście ani żadnych komunikatów.


#include <iostream>
#include <list>
#include <cstdlib>

using namespace std;

int main(void)
{
    list <int> l;
    int number;

    for (int i = 0; i < 10; i++)  // wielkość listy w tym przypadku będzie to 10 liczb
    {
        number = i;  
        l.push_back(number);
    }

    cout << "List before " << endl;

    for (auto it = l.begin(); it != l.end(); ++it) // wyświetlenie listy
        cout << *it << endl;

    auto iterator = next(l.begin());

    int count = 0;
    for (auto value: l)
    {
        if (count % 2)
        {
            cout << "first : " << l.front() << endl;
            l.pop_front();
        }
        else
        {
            cout << "last: " << l.back() << endl;
            l.pop_back();
        }
        count++;
    }

    getchar();
    return 0;
}
0

Na pewno masz użyć std::list, a nie np. std::vector?

    for (auto value: l)
    {
        if (count % 2)
        {
            cout << "first : " << l.front() << endl;
            l.pop_front();
        }
        else
        {
            cout << "last: " << l.back() << endl;
            l.pop_back();
        }
        count++;
    }

Dlaczego modyfikujesz kontener podczas iteracji po nim? W tym zadaniu zapewne chodzi o to, abyś po prostu skorzystał z dwóch iteratorów rosnących w przeciwnych kierunkach.

0

na liście na pewno. Na początku źle przeczytałem i zrobiłem na wektorze

opuściłem zajęcia z list bo akurat byłem chory. Jak ZROBIC 2 ITETATORY TAK ABY ROSŁY W DWÓCH KIERUNKACH?

0

Rozwiązanie z rbegin() i rend() wydaje się najsensowniejsze. Ale jeśli chciałbyś na szybko naprawić swój oryginalny program wystarczy że
for (auto value: l)
zamienisz na
while (not l.empty())
Zwróć jednak uwagę, że po wykonaniu twojego programu lista będzie pusta ponieważ usuwasz z niej kolejno elementy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0