我们正在尝试使用std :: deque erase成员函数。 std :: deque erase(iterator)成员函数的返回值是一个随机访问迭代器,指向函数调用擦除的最后一个元素之后的元素的新位置,如果操作擦除了该函数,则该容器结束序列中的最后一个元素。
我们想知道是否有可能有效地检查STL std :: deque erase是否成功。谢谢。我们的代码摘录如下所示:
typedef std::multimap<char *,Range>::const_iterator I;
std::pair<I,I> b = mmultimap.equal_range(TmpPrevMapPtr);
for (I i=b.first; i != b.second; ++i){
std::deque<Range>::iterator iter;
std::deque<Range>::iterator it;
iter = std::lower_bound(ranges_type.begin(),ranges_type.end(),i->second);
if (iter != ranges_type.end() && !(i->second < *iter)){
it = ranges_type.erase(iter);
}
}
答案 0 :(得分:3)
std::deque::erase
总是成功的(当然,它会得到一个无效的迭代器,在这种情况下结果是未定义的)。
答案 1 :(得分:2)
检查出队的大小是否因您删除的元素数量而减少
关于对效果的关注,dequeue::size
的时间复杂度为O(1)
#include <iostream>
#include <deque>
using namespace std;
int main ()
{
unsigned int i;
deque<unsigned int> mydeque;
// set some values (from 1 to 10)
for (i=1; i<=10; i++) mydeque.push_back(i);
cout << "\nmydeque contains:"<<mydeque.size();
// erase the 6th element
mydeque.erase (mydeque.begin()+5);
// erase the first 3 elements:
mydeque.erase (mydeque.begin(),mydeque.begin()+3);
//Total Elements erased = 4
cout << "\nNow mydeque contains:"<<mydeque.size();
return 0;
}
答案 2 :(得分:1)
如果擦除成功,则双端队列将比原来短。或者,将代码包装在一个函数中(在任何情况下你都应该这样做)并让函数返回是否发生擦除。