c ++遍历整个列表

时间:2015-12-08 23:13:29

标签: c++ list logic

我有一个列表的函数,例如{10,14,2,4,8} 然后我遍历整个列表,然后我将它除以除数然后%2.循环应该继续运行,直到除数大于列表中的最大数。样本输出将是;

10=0
14=0
2=0
4=0
8=0

然后除数乘以2并产生。

10=1
14=1
...

我只获得第一部分,然后停止。我知道我的逻辑在哪里错了。

void Splice(std::list<int> list_Original)
{
   int largest_number_in_list=getMax(list_Original);
   int divisor=1;
   std::list<int> new_list;

   for(std::list<int>::iterator i=list_Original.begin();i !=      list_Original.end();i++)
   {
       if(divisor<largest_number_in_list)
       {
           int n=((*i/divisor)%2);
           std::cout<<*i<<"="<<n<<std::endl;
           //new_list.push_back(n);
           divisor=2*divisor;
           //std::cout<<"hihh";
        }

        for(std::list<int>::iterator i=new_list.begin();i!=new_list.end();i++)
        {
            std::cout<<*i<<std::endl;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

忽略你正在使用“新列表”做的任何事情,你在divisor循环迭代列表一次之后就会退出。你也在每次迭代中加倍除数。您希望在for和最大数字之间进行检查以循环while循环,因此请使用while (divisor < largest_number_in_list) { for(std::list<int>::iterator i=list_Original.begin();i !=list_Original.end();i++) { int n=((*i/divisor)%2); std::cout<<*i<<"="<<n<<std::endl; } divisor=2*divisor; }

change_table