我想在该块内的list2之后遍历list1。 请告诉我们如何实现这一目标。我猜想为什么那些不起作用但却不知道如何实现呢
enum type {VALID,INVALID};
#define ADD_A(x,y) addtolist x(#x,VALID,y);
#define ADD_B(x,y) addtolist x(#x,INVALID,y);
class addtolist {
public:
std::string name;
int val;
std::list<int> list1;
std::list<int> list2;
std::list<int>::iterator v;
std::list<int>::iterator w;
addtolist(std::string name, type _val, int range);
};
class newlist {
public:
newlist(){
ADD_A(ob1,5);
ADD_B(ob2,5);
}
};
addtolist::addtolist( std::string name, type _val, int range ) {
name = name;
val = _val;
int i;
if (val==0){
for(i=0;i<=range;i++){
list1.push_back(i);
}
for (v = list1.begin(); v != list1.end(); ++v){
std::cout <<"\nvalid list == "<<*v << std::endl;
}
std::cout<<"\n size of list1 == "<< list1.size()<<std::endl;
}else if (val==1){
for(i=0;i<=range;i++){
list2.push_back(i);
}
for ( w = list2.begin(); w != list2.end(); ++w){
std::cout <<"\nINVALID LIST == "<<*w<< std::endl;
}
// i dont know why this gets zero and also the loop does not work and how to make this work
std::cout<<"\n THIS BECOMES ZERO == "<< list1.size()<<std::endl;
for (v = list1.begin(); v != list1.end(); ++v){
std::cout <<"\nVALID LIST == "<<*v << std::endl;
}
}
}
int main()
{
newlist a;
}
问题出在其他部分,如果阻止即。迭代list1和 list1.size(); ..
答案 0 :(得分:0)
拥有两个内部std::list
容器的设计原因尚不清楚。只有list
个容器中的一个被填充,具体取决于传递给
enum type _val
值
addtolist(std::string name, type _val, int b);
构造。为了拥有list1
类型的非空INVALID
容器,构造函数的主体必须相应地更改。换句话说,第二个对象ob2
包含list2
的元素,因为第二个容器是已填充的唯一list
。
如果有疑问,请检查两个list1.empty()
值的enum type
条件,这不是必需的,因为list1.size()
类型的INVALID
值已显示为零。最终,为for
类型遍历list1
的{{1}}循环的行为与它对空容器的行为完全相同。
始终填充INVALID
的一种方法是将list1
移到检查list1 for loop
的if语句逻辑之上。这只是一个例子。实际的设计修改取决于OP。
enum type