C++遍历整个列表

c++ iterating through whole list

我有一个接受列表的函数,例如 {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;
        }
    }
}

忽略您对 "new list" 所做的任何操作,您 for 循环在遍历列表一次后退出。您还在每次迭代期间将除数加倍。您希望 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;
}