-2

我想在该块内的 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(); ..

4

1 回答 1

0

std::list具有两个内部容器的设计原因尚不清楚。仅list填充其中一个容器,具体取决于enum type _val传递给

addtolist(std::string name, type _val, int b);

构造函数。为了有一个类型的非空list1容器,INVALID构造函数的主体必须相应地改变。换句话说,第二个对象ob2有元素 for list2,因为容器号 2 是唯一list被填充的。

如果有疑问,请检查这list1.empty()两个值的条件enum type,这并不是必需的,因为该类型的list1.size()值已经显示为零INVALID。最终,遍历该类型的for循环的行为与空容器的行为完全相同。list1INVALID

始终list1填充的一种方法是将list1 for loop上面的 if 语句逻辑移动到检查enum type. 这只是一个例子。实际的设计修改取决于 OP。

addtolist::addtolist( std::string name, type _val,  int range ) 
{
   name = name;
   val = _val;
   int i;
   for(i=0;i<=range;i++)
   {
      list1.push_back(i);
   }

   if (val==VALID)
   {
      // 
      // for loop that prints list1 content and other code follows as before
      //
   .
   .
   .
于 2014-03-30T01:51:50.283 回答