这个C ++列表有什么问题?

时间:2012-01-31 05:19:22

标签: c++ list stl

我有一个基本工作,只生成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 个答案:

答案 0 :(得分:1)

list.front()返回对第一个元素的引用,我想您想使用list.empty()来检测空或满的状态(在您特定的情况下,您是其中之一,没有灰色区域。)

此外,在某些圈子里,“使用命名空间std”并不赞同你没有包含numeric_limits的头文件(尽管如果你只是将它用作“按任何一个”,它可能是不必要的。键继续“IDE中的方法”。

此外,不需要检查random是否为1,因为它始终为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;
}

答案 1 :(得分:0)

显然,这条线不正确:

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

由于MyList.front()是“int”类型的引用。