C++官网参考链接:https://cplusplus.com/reference/deque/deque/erase/
公有成员函数
<deque>
std::deque::erase
C++98
iterator erase (iterator position);
iterator erase (iterator first, iterator last);
C++11
iterator erase (const_iterator position );
iterator erase (const_iterator first, const_iterator last );
删除元素
从deque容器中删除单个元素(position)或一系列元素([first,last))。
这通过删除元素的数量有效地减少了容器的size。
deque的设计目的是在序列的结束处或开始处高效地删除(和插入)元素。在其他位置上的删除通常比在list或forward_list容器中更低效。
形参
position
指向要从deque中删除的单个元素的迭代器。
成员类型iterator和const_iterator是指向元素的随机访问迭代器(random access iterator)类型。
first,last
在deque中指定要删除的范围的迭代器:[first,last)。也就是说,范围包括first和last之间的所有元素,包括first指向的元素,但不包括last指向的元素。
成员类型iterator和const_iterator是指向元素的随机访问迭代器(random access iterator)类型。
返回值
一个迭代器,指向被函数调用删除的最后一个元素后面的元素的新位置。如果操作删除了序列中的最后一个元素,则返回值为容器结束(container end)。
成员类型iterator是指向元素的随机访问迭代器(random access iterator)类型。
用例
// erasing from deque
#include <iostream>
#include <deque>
int main ()
{
std::deque<int> mydeque;
// set some values (from 1 to 10)
for (int i=1; i<=10; i++) mydeque.push_back(i);
// erase the 6th element
mydeque.erase (mydeque.begin()+5);
// erase the first 3 elements:
mydeque.erase (mydeque.begin(),mydeque.begin()+3);
std::cout << "mydeque contains:";
for (std::deque<int>::iterator it = mydeque.begin(); it!=mydeque.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
输出:
复杂度
在删除(析构)元素的数量上是线性的。另外,根据特定的库实现,根据position和deque结束之一之间的元素数量增加一个额外的线性时间。
迭代器有效性
如果删除操作包含序列中的最后一个元素,则结束迭代器(end iterator)和指向被删除元素的迭代器、指针和引用都将失效。
如果删除包含first元素但不包含last元素,则只有引用被删除元素的元素无效。
如果它发生在deque的其他地方,所有与容器相关的迭代器、指针和引用都将失效。
数据竞争
完成容器的修改。
如果删除发生在序列的开始或结束,则只修改被删除的元素(尽管请参阅上面的迭代器有效性)。
如果它发生在其他任何地方,则访问或修改元素是不安全的。
异常安全
如果被删除的元素包括容器中的第一个或最后一个元素,则不会抛出异常(无抛出保证)。
否则,容器将保证以有效状态结束(基本保证):在重定位元素时复制或移动元素可能会抛出。
无效的范围会产生未定义的行为。