C++ 如何遍历std::list<;int>;在此代码中

C++ 如何遍历std::list<;int>;在此代码中,c++,stl,iterator,stdlist,C++,Stl,Iterator,Stdlist,我想在该块中的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

我想在该块中的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;
}
enum类型{有效,无效};
#定义ADD_A(x,y)addtolist x(#x,VALID,y);
#定义添加B(x,y)添加列表x(#x,无效,y);
类添加列表{
公众:
std::字符串名;
int-val;
std::列表1;
std::列表2;
std::list::迭代器v;
std::list::迭代器w;
addtolist(标准::字符串名称,类型_val,整数范围);
};
类新列表{
公众:
新列表(){
添加_A(ob1,5);
添加_B(ob2,5);
}
};
addtolist::addtolist(标准::字符串名称,类型_val,整数范围){
名称=名称;
val=_val;
int i;
如果(val==0){

对于(i=0;i具有两个内部
std::list
容器的设计原因不清楚。根据传递给

addtolist(std::string name, type _val, int b);
构造函数。为了使
无效的
类型具有非空的
list1
容器,构造函数的主体必须相应地更改。换句话说,第二个对象
ob2
具有
list2
的元素,因为容器号2是唯一已填充的
list

如果有疑问,请检查
list1.empty()
两个
enum type
值的条件,因为
list1.size()对于
无效的
类型,
值已显示为零。最终,对于
无效的
类型,遍历
列表1的
for
循环的行为与空容器的行为完全相同

始终填充
list1
的一种方法是将
list1 for loop
移动到检查
枚举类型的if语句逻辑上方。这只是一个示例。实际的设计修改取决于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
      //
   .
   .
   .
addtolist::addtolist(标准::字符串名称,类型_val,int范围)
{
名称=名称;
val=_val;
int i;

对于(i=0;i-1)“如果代码中有任何错误,请忽略,问题出在else if块中,即迭代list1和list1.size();”只需发布与问题相关的代码片段,而不是hole代码库。还要正确格式化代码,而不仅仅是复制粘贴。此问题似乎与主题无关,因为它只是为了查看(或调试)刚刚复制粘贴到SO中的代码。在这种情况下,我无法理解代码中的问题或我所犯的错误。很抱歉,我无法选择确切的主题或正确解释问题。唯一可以解释我的问题的方法是复制粘贴代码。让我害怕的是,人们可能会编写没有缩进的代码。此代码我甚至没有编译…你试过吗?有两个列表的原因是在将INVALID的元素放入list2之前,我想将它们与VALID(list1)的元素进行比较。在此之前,我尝试打印列表1的内容,该内容对于ob2将为空。我尝试的方式是否可能进行比较。请建议我执行此操作的方法。谢谢You@vrsm您想比较内部列表(例如
list1
list2
)在
addtolist
类的两个不同实例中。这就是您想要的吗?不,我不想在填充两个列表后比较它们,我只想将INVALID的每个元素与list1(VALID)的元素进行比较在将INVALID的元素推入list2之前已填充。@vrsm在假设有两个完全配置的实例并忽略让所有类数据成员公开访问是不好的做法之前,您具体说的是
instance1.list1==实例2的潜在列表
,对吗?@vrsm如果这是您的目标al,然后在创建第二个
addtolist
实例之前创建一个单独的
list
容器。必须有一个新的构造函数,根据第一个实例的
list1
内容与列表容器的比较结果,获取这个新的潜在列表和
枚举类型的正确值t将用于第二个实例。如果您了解通过
std::list
容器可用的比较操作,那么这很简单。请相应地修改发布的问题。