那么递增或递减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
答案 0 :(得分:8)
增加从任何标准C ++库容器的end()
返回的迭代器会导致未定义的行为。由于大多数std::list<T>
实现的共同实现细节,它可能会增加list.end()
,但不能保证它会增加。
答案 1 :(得分:4)
不,这不行。 std::list
迭代器是BidirectionalIterator,是ForwardIterator的细化。对于ForwardIterator,++i
和i++
的前提条件是:
i
是可解除引用的
不适用于end()
因为它指向过去列表的最后一项。