检查这个代码:
#include "stdafx.h"
#include <list>
int _tmain(int argc, _TCHAR* argv[])
{
std::list<int> mylist;
mylist.push_back(1);
std::list<int>::iterator i = mylist.end();
if( i == mylist.end() )
printf( "end is end\n" );
mylist.clear();
if( i == mylist.end() )
printf( "never get here because Microsoft seems to "
"think the iterator is no longer safe.\n" );
return 0;
}
现在,根据cplusplus.com http://www.cplusplus.com/reference/list/list/clear/这不应该是一个问题,在发布模式下,我认为这很好,不会真正导致任何问题,但调试变得不可能,因为这只是保释而不让我继续。有什么指点吗?
其他答案指出,一般来说,您不能依赖容器的尾后迭代器在容器被清除时仍然有效。然而,列表的尾后迭代器确实应该保持有效:
C++11 23.3.5.4/3Effects:仅使迭代器和对已擦除元素的引用无效。
尾后迭代器不引用任何元素,因此不应失效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)