erase 其中一种实现
(来源:cygnus 2.91.57,github:https://github.com/xuchanglong/Cygnus-comments)
iterator erase(iterator position)
{
if (position + 1 != end())
copy(position + 1, finish, position);
// 使得 finish 指向多余的那个元素。
// 同时也保证了 finish 始终位于有效数据的下一位。
--finish;
// 删除该多雨位置的内存。
destroy(finish);
return position;
}
因为,该函数的功能主要是将 position 之后的数据覆盖到以 position 为开始的内存中。整个函数完事之后,传入的指针 position 和返回的 position 是没有改变的,所以该函数没有网上说的执行了 erase 之后,position 之后的迭代器会失效的问题,可能和其实现有关系。
(SAW:Game Over!)
本文详细解析了erase()函数的一种实现方式,通过源代码展示如何将指定位置后的数据向前覆盖,实现元素的删除。讨论了这种实现方式下迭代器的有效性问题。
1099

被折叠的 条评论
为什么被折叠?



