Что не так с этим списком C ++? - PullRequest
0 голосов
/ 31 января 2012

У меня есть базовая работа, просто сгенерировать случайную последовательность из 10 состояний, 0 = производить, 1 = потреблять.для каждого 0 мне нужно заполнить список, если его полное ничего не делать, и для 1, очистить список ... если оно уже пусто, ничего не делать.

Я сделал простой pop_front, push_front, чтобыположить вещи в список и из списка ... но я не знаю, почему это не так ... какие-то мысли?

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

using namespace std;

int main(){
    list<int> MyList;
    int random;
    for (int i=10; i>0; i--){
        random = rand() % 2;
        if(random == 0){
            if(MyList.front() == NULL){
                for(int k=10; k>0; k--){
                    MyList.push_front(k);
                }
            }
        } else if(random == 1){
            if(MyList.front() != NULL){
                for(int j=10; j>0; j--){
                    MyList.pop_front();
                }
            }
        }


        std::cout << random << ", ";
    }
    std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
    return 0;
}

Ответы [ 2 ]

1 голос
/ 31 января 2012

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

Кроме того, в определенных кругах не одобряется «использование пространства имен std», и вы не включили заголовочный файл для numeric_limits (хотя это, вероятно, не нужно, если вы просто используете это как «Нажмите любую клавишу для продолжить "метод внутри IDE).

Также нет необходимости проверять, является ли random единицей, поскольку она всегда будет 1 или 0. Другими словами, бит if будет выполняться, если он равен 0, а бит else будет выполняться иначе ( когда это 1).

Исправление всего, что дает вам:

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

int main (void) {
    int random;
    std::list<int> MyList;

    for (int i = 10; i > 0; i--) {
        random = rand() % 2;
        if (random == 0) {
            if (MyList.empty()) {
                for (int k = 10; k > 0; k--) {
                    MyList.push_front (k);
                }
            }
        } else {
            if (!MyList.empty()) {
                for (int j = 10; j > 0; j--) {
                    MyList.pop_front();
                }
            }
        }
        std::cout << random << ", ";
    }

    std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
    return 0;
}
0 голосов
/ 31 января 2012

Очевидно, эта строка неверна:

if(MyList.front() == NULL){

Поскольку MyList.front () является ссылкой типа "int".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...