我更喜欢从源头获取信息,在这种情况下,这是ISO-IEC 14882, 擦除方法描述如下:
“迭代器擦除(const_iterator位置);
迭代器擦除(const_iterator首先,const_iterator最后);效果:无效 擦除点或擦除点之后的迭代器和引用。
复杂度:T的析构函数称为次数等于 擦除的元素数,但移动分配运算符为 T称为与元素中元素数相等的次数 删除元素后的向量。
抛出:什么都没有,除非有异常 由复制构造函数,移动构造函数,赋值引发 运算符,或移动T的赋值运算符。”
找不到有关返回的迭代器的信息, 当然,我用Google搜索并得到:
一个迭代器,指向后面的元素的新位置 函数调用删除的最后一个元素
无法理解标准中的描述
你能指出我吗?
更新:我的问题不是关于vector::erase
的工作方式,
但是我可以从标准的哪个位置开始,作为我可靠的信息来源,我们就可以推断出有关返回值的信息
答案 0 :(得分:8)
该信息有点不直观。 erase
返回的内容在“常规容器要求”部分的“序列容器”部分下进行了详细说明,尤其是[sequence.reqmts]/11
从
a.erase(q)
返回的迭代器指向在删除元素之前紧接q
之后的元素。如果不存在这样的元素,则返回a.end()
。
由
a.erase(q1, q2)
返回的迭代器在擦除任何元素之前指向q2
指向的元素。如果不存在这样的元素,则返回a.end()
。
答案 1 :(得分:-3)
假设您有一个由4个元素组成的向量,并且有一个引用第二个元素的迭代器。如果现在在该迭代器上使用“擦除”,则“擦除”将返回一个迭代器,该迭代器引用的是第三个元素,即由于擦除而刚擦除的第二个元素,但现在为第二个元素。