簡體   English   中英

是否可以有效地檢查 STL 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM