![](/img/trans.png)
[英]C++ STL: most efficient way to erase the last / first n elements of a std::deque
[英]Is it possible to efficiently check whether STL std::deque erase succeded?
我們正在嘗試使用 std::deque 擦除成員 function。 std::deque erase(iterator) 成員 function 的返回值是一個隨機訪問迭代器,指向由 function 調用擦除的最后一個元素之后的元素的新位置,如果操作擦除了序列中的最后一個元素。
我們想知道是否可以有效地檢查 STL std::deque 擦除是否成功。 謝謝你。 我們的代碼摘錄如下所示:
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);
}
}
std::deque::erase
總是成功(當然,除非它得到一個無效的迭代器,在這種情況下結果是未定義的)。
檢查出隊的大小是否因您刪除的元素數量而減少。
關於性能問題, 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;
}
如果擦除成功,則雙端隊列將比原來短。 或者,將您的代碼包裝在 function 中(無論如何您都應該這樣做),並讓 function 返回是否發生擦除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.