我有一个基本工作,只生成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;
}
答案 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”类型的引用。