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