C++ 如何遍历std::list<;int>;在此代码中
我想在该块中的list2之后遍历list1。 请告诉我如何做到这一点。我有一个猜测,为什么这不起作用,但我不知道如何让它发生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
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
容器可用的比较操作,那么这很简单。请相应地修改发布的问题。