c++遍历整个列表

c++ iterating through whole list

本文关键字:列表 遍历 c++      更新时间:2023-10-16

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

忽略您对"新列表"所做的任何操作,即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;
}