所以我有这个要求打印所有其他值的任务,打印一个跳过一个,但是我在执行它时遇到了麻烦,我所做的就是让它打印所有的迭代器,需要帮助。
void print_even(const list<short>& data)
{
if (data.empty())
{
cout << "<>";
}
else
{
list<short>::const_iterator iter = data.cbegin();
cout << "<" << *iter;
++iter;
while (iter != data.end())
{
cout << ", " << *iter;
++iter;
}
cout << ">";
}
}
答案 0 :(得分:0)
虽然您可以使用%2方法,但不需要,还有其他选项。
一种选择是为每个输出增加两次。 如果循环超过奇数个元素,则需要确保循环仍然正确终止,并且不会跳过结尾。有很多方法可以做到这一点,一种方法是检查结束两次: -
while (iter != data.end())
{
++iter; // increment without output since first element is handled outside loop
if(iter == data.end()) // 2 checks due to 2 increments per loop
{
break;
}
cout << ", " << *iter;
++iter;
}
或者你可以控制是否输出一个bool: -
bool shouldOutput = false; // starts false as first item already output
while (iter != data.end())
{
if(shouldOutput)
{
cout << ", " << *iter;
}
shouldOutput = !shouldOutput;
++iter;
}
我并不是说这些比%2方法好得多,只是指出了其他一些方法。