2012-01-31 75 views
0

我有一个基本的工作,只产生一个随机的10个状态序列,0 =产生,1 =消耗。对于每0,我需要填充该列表,如果它完全没有做任何事情,并为1,清空列表...如果它已经是空的,什么都不做。这个C++列表有什么问题?

我做了简单的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

你知道它有什么问题吗?当你运行它时会发生什么,以及它与你期望的有什么不同? – 2012-01-31 05:21:58

+0

是什么让你觉得这是错的? – Borealid 2012-01-31 05:22:28

回答

1

list.front()返回的第一个元素的引用,我想你想使用list.empty()检测的为空或满(在你是一个或另一个您的特定情况下的状态,没有灰色地带)。

另外,它在某些圈子中被“使用命名空间标准”所折服,并且您没有包含numeric_limits的头文件(尽管如果您只是将其用作“按任意键继续“IDE中的方法)。

而且没有必要为random为一种,因为它总是会是1或0。换句话说,如果它是0的if位将执行的检查,和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

谢谢你,我的朋友......你实际上忽略了随机的声明,但除此之外,这是有效的;)我感谢帮助 – 2012-01-31 06:13:28

+0

@Gal:是的,我陷入了其他中间编辑。我想摆脱它,但后来发现它用在'cout <<'语句中,所以应该留下。所以我把声明放回去了。 – paxdiablo 2012-01-31 06:25:48

0

很显然,这条线是不正确的:

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

由于MyList.front()是 “int” 类型的参考。