此循环在运行时更改迭代器:
std::vector<int> c;
c.push_back(1);
c.push_back(2);
std::vector<int>::iterator iter = c.begin();
std::vector<int>::iterator endIter = c.end();
while( iter != endIter )
{
std::cout << (*iter) << std::endl;
iter = c.erase(iter);
}
它不起作用,因为:
迭代器和对已擦除元素以及它们与容器末端之间的元素的引用无效。Past-the-end迭代器也无效
我怎样才能重写它(不使用std::list
, 并使用while
循环)?
顺便说一句,我知道这auto
是从 C++11 开始实现的。为什么使用它会有好处?