使用迭代器打印出列表

时间:2017-02-24 07:39:03

标签: c++ iterator

所以我有这个要求打印所有其他值的任务,打印一个跳过一个,但是我在执行它时遇到了麻烦,我所做的就是让它打印所有的迭代器,需要帮助。

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 << ">";
    }
}

1 个答案:

答案 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方法好得多,只是指出了其他一些方法。