boost的专用迭代器适配器的文档声明boost::reverse_iterator"纠正了C++ 98的std :: reverse_iterator的许多缺点."
这些缺点是什么?我似乎无法找到这些缺点的描述.
后续问题:
boost :: reverse_iterator如何纠正这些缺点?
这只是创建了一些列表元素,然后在开始时通过反向迭代删除元素.它是代码的实际问题的复制品,它在反向遍历它们时删除元素.
#include <list>
int main()
{
std::list< int > lst;
for ( int c = 33; c--; )
lst.push_back( 0 );
int count = 0;
for ( std::list< int >::reverse_iterator i = lst.rbegin(), e = lst.rend();
i != e; )
{
switch( count++ )
{
case 32:
case 33:
++i;
i = std::list< int >::reverse_iterator( lst.erase( i.base() ) );
break;
default:
++i;
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行时,它会崩溃:
*** glibc detected *** ./a.out: double free or corruption (out): 0x00007fff7f98c230 *** …Run Code Online (Sandbox Code Playgroud)