6

那么增加或减少 end() 迭代器是在标准中定义的吗?在 linux 上,begin() 被实现为 end()++。

#include <list>
#include <iostream>

int main()
{
  std::list<int> numbers;
  for (int i = 0; i < 10; i++)
    numbers.push_back(i);

  auto it = numbers.begin();
  int count = 3;
  while (count)
  {
    std::cout << *it++;
    if (it == numbers.end())
    {
      ++it; // is this ok ???
      --count;
      std::cout << '\n';
    }
  }
}

那么每个平台上的输出总是相同的吗?

输出:

0123456789
0123456789
0123456789
4

2 回答 2

9

递增从end()任何标准 C++ 库容器返回的迭代器会导致未定义的行为。由于大多数实现通用的实现细节,std::list<T>它可能会增加list.end(),但不能保证它会增加。

于 2012-10-20T19:47:05.327 回答
4

不,这不行。std::list迭代器是一个BidirectionalIterator,它是ForwardIterator的一种改进。ForwardIterator++i的前提条件是:i++

i是可取消引用的

它不成立,end()因为它指向列表的最后一项。

于 2012-10-20T19:48:45.330 回答