日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【C++】队列优先队列详解——deque.queue.priority_queue

發布時間:2023/12/20 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++】队列优先队列详解——deque.queue.priority_queue 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

deque

  • 可以隊首和隊尾插入,也可以隊首和隊尾彈出

  • 支持隨機訪問,即可以直接用下標來訪問元素。它和vector有點像,因為它可以index索引和at()函數索引,當然,也可以迭代器索引。

  • 此外,它可以進行指定尺寸的構造,queue就不可以指定尺寸構造。

  • 構造函數

    deque<int> q1; deque<int> q2(6,8);//6個值為8的成員 deque<int> q3(q2.begin() + 2, q2.end()); deque<int> q4(q2);

    迭代器

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-AuIBjgSo-1669195255380)(C:/Users/l/AppData/Roaming/Typora/typora-user-images/image-20221123160955743.png)]

    常用操作

    操作明顯多于queue和pq

    empty(); //判斷容器是否為空 clear(); //清空容器的所有數據 size(); //返回容器中的元素的個數 resize(num); //重新指定容器的長度為num,若容器變長,則以默認值填充新位置。//如果容器變短,則末尾超出容器長度的元素被刪除。 resize(num,elem); //重新指定容器的長度為num,若容器變長,則以elem值填充新位置。如果容器變短,則超出容器長度的元素被刪除。 clear(); //清空容器的所有數據 swap();

    訪問操作

    at(int idx); //返回索引idx所指的數據 operator[]; //返回索引idx所指的數據 front(); //返回容器中第一個數據元素 back(); //返回容器中最后一個數據元素

    插入刪除覆蓋

    deque<int>::iterator it = bar.begin(); push_back(elem); //在容器尾部添加一個數據 push_front(elem); //在容器頭部插入一個數據 pop_back(); //刪除容器最后一個數據 pop_front(); //刪除容器第一個數據insert(pos,elem); //在pos位置插入一個elem元素的拷貝,返回新數據的位置。 insert(pos,n,elem); //在pos位置插入n個elem數據,無返回值 insert(pos,beg,end); //在pos位置插入[beg,end)區間的數據,無返回值erase(beg,end); //刪除[beg,end)區間的數據,返回下一個數據的位置。 erase(pos); //刪除pos位置的數據,返回下一個數據的位置。assign(beg, end); //將[beg,end)區間中的數據拷貝賦值給本身。 assign(n,elem); //將n個elem拷貝賦值給本身。

    關于push和emplace的區別

    https://blog.csdn.net/jokerMingge/article/details/119736247

    C++11

    emplace() emplace_back() emplace_front() emplace_cbegin emplace_crbegin emplace_cend emplace_crend ; shrink_to_fit(); //請求容器減少內存使用以適應其大小。

    與其他container的區別

    頭插

    vector對于頭部的插入效率低,數據量越大,效率越低,例如頭部后有十萬個數據,則往頭部插入一個數據時,十萬個數據都需要往后挪一挪才能在頭部插入數據。deque相對而言,對頭部的插入刪除速度會比vector快。deque在頭部和尾部進行數據插入和刪除操作更加高效。

    如果沒有頻繁在頭部或尾部進行插入和刪除操作,deque比list和forward_list的性能更差。

    訪問

    vector訪問元素時的速度會比deque快。

    存儲

    與vector不同的是,deque不能保證所有的元素存儲在連續的空間中,在deque中通過指針加量方式訪問元素可能會導致非法的操作。

    vector使用使用動態數組,該數組通常需要動態增長;deque中的元素可能分散在不同的存儲塊中,在deque中保存一些必要的信息,通常用來在常數范圍內直接訪問deque中的任何一個元素,所以deque的內部實現比vector復雜,但是這些額外信息使得dque在某些情況下增長更加的高效,特別是在序列比較大,重新分配成本比較高的情況下。

    內部工作原理

    和 vector 容器采用連續的線性空間不同,deque 容器存儲數據的空間是由一段一段等長的連續空間構成,各段空間之間并不一定是連續的,可以位于在內存的不同區域。為了管理這些連續空間,deque 容器用數組存儲著各個連續空間的首地址。也就是說,數組中存儲的都是指針,指向那些真正用來存儲數據的各個連續空間。

    通過建立數組,deque 容器申請的這些分段的連續空間就能實現“整體連續”的效果。換句話說,當 deque 容器需要在頭部或尾部增加存儲空間時,它會申請一段新的連續空間,同時在數組的開頭或結尾添加指向該空間的指針,由此該空間就串接到了 deque的頭部或尾部。

    priority_queue

    優先隊列是一種會按照默認或自定義的優先級進行自動排序的隊列,其特點是優先級高的元素排在隊首,低的排在隊尾。

    創建

    數據類型:可以是int、double等基本類型,也可以是自定義的結構體。
    容器類型:一般為deque(雙端列表)、vector(向量容器),可省略,省略時以vector為默認容器。
    pq:優先隊列名。

    priority_queue< 數據類型,容器類型,優先規則> pq; priority_queue<int> pq; priority_queue<int,vector<int>,less<int> > pq; //以less為排列規則(大頂堆,表示頂堆元素比其他都大) priority_queue<int,vector<int>,greater<int> > pq; //以greater為排列規則(小頂堆,表示頂堆元素比其他都小)

    常用操作

    pq.push(); //入隊 pq.pop(); //出隊 pq.size() //返回當前對中元素個數 pq.top(); //優先隊列 取隊首元素 pq.empty(); //判斷是否為空(空返回 1,非空返回 0) C++11 pq.swap() pq.emplace()

    與queue的區別在于queue有front()和back(),而pq只有top()

    queue

    (58條消息) C++隊列queue用法詳解_KEPROM的博客-CSDN博客_c++ queue

    一般直接用deque。deque的功能比queue更全,而且queue底層也是用deque創建的

    創建

    queue<數據類型,容器類型> q;

    數據類型:可以是int、double等基本類型,也可以是自定義的結構體。
    容器類型:一般為deque或者list(雙向鏈表),可省略,省略時以deque為默認容器。

    queue<int> q; //使用默認的雙端隊列為底層容器創建一個空的queue隊列對象q,數據元素為int類型。 queue<int,list<int>> q1; queue<int,list<int>> q2(q1); /*復制構造函數(queue(const queue&)),用一個queue對象創建新的queue對象。 利用queue對象q1,創建一個以雙向鏈表為底層容器的queue對象q2*/
  • 和 stack 一樣,queue 也沒有迭代器。訪問元素的唯一方式是遍歷容器內容,并移除訪問過的每一個元素。
  • 只能隊尾插入,隊首彈出。
  • queue不初始化元素個數或者初始化值
  • 常用操作

    q.push(x); //入隊,將元素 x 從隊尾插入(尾插法) q.pop(); //出隊,刪除對首元素,并返回其值 q.size(); //返回隊中元素個數 q.front(); //返回隊首元素 q.back(); //返回隊尾元素 q.empty(); //判斷是否為空(空返回 1,非空返回 0) C++11 q.swap(q2) q.emplace(x) //入隊

    empty()函數可以判斷隊列是否為空,但沒有clear來清空,可以創建空的queue用swap函數交換

    queue q2; if (q1.empty()) { cout << “q1 is empty” << endl; } q1.swap(q2); if (q1.empty()) { cout << “q1 is empty after swap” << endl; }

    總結

    以上是生活随笔為你收集整理的【C++】队列优先队列详解——deque.queue.priority_queue的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日本三级大片 | 99re这里只有精品在线观看 | 中文字幕欧美视频 | 成人合集 | 国产精品久久99 | 久久与婷婷 | 欧美又粗又长 | 亚洲小说区图片区 | 中文字幕三区 | 亚洲美女在线观看 | 99热热99| 日本中文字幕精品 | 黄色网页免费在线观看 | 亚洲三级色 | 亚洲12p | 亚洲美女高潮久久久 | 91免费在线看 | 四虎国产在线观看 | 羞羞的视频网站 | 国产又粗又猛又爽又黄的视频一 | 亚洲综合一| 日韩精品中文在线 | 亚洲高清在线一区 | av中文网 | 亚洲精品乱码久久久久久蜜桃图片 | 九九色视频 | 99看片 | 中文字幕在线观看免费 | 岛国大片在线免费观看 | 精品无码人妻一区二区免费蜜桃 | 精品人妻少妇一区二区三区 | 国产第六页 | 午夜精品久久久久久久无码 | 国产成人黄色av | av在线专区 | 97色婷婷 | 青青久久av | 麻豆精品一区 | 狠狠插狠狠操 | 无套日出白浆 | 五月婷婷在线观看 | 性一交一乱一乱一视频 | 久久无毛 | av色欲无码人妻中文字幕 | 国产精品1234区 | 色男天堂| 青青超碰 | 毛片中文字幕 | chinese中国性按摩hd | 成人h网站| 一本色道久久综合亚洲精品图片 | 99久久99久久精品国产片果冰 | 青青草原免费观看 | 亚洲成人天堂 | 午夜私人影院 | 国产精品久久久久久亚洲 | 性——交——性——乱免费的 | 长河落日电视连续剧免费观看01 | 天天爱天天射 | 99re在线精品视频 | 亚洲欧美另类中文字幕 | 视频1区2区 | 国产在线精品成人欧美 | 亚洲天堂视频在线播放 | 国产永久免费 | 国产嫩草在线观看 | xxx国产在线观看 | 久久久水蜜桃 | 一级香蕉视频在线观看 | 欧美性受黑人性爽 | 日韩黄色视屏 | 黄色片久久 | 人妻无码一区二区三区久久99 | 成人区人妻精品一区二区不卡视频 | 国产黄免费 | 少妇人妻一区二区三区 | 国产又粗又硬视频 | 午夜精品一区二区在线观看 | 国产一国产二 | 精品裸体舞一区二区三区 | 日本韩国欧美中文字幕 | 国产三级网站 | 91麻豆一区二区 | 中文字幕日韩精品亚洲一区小树林 | 日韩国产91 | 日韩精品一区二区三区网站 | 一个人看的www日本高清视频 | 在线看不卡av | 免费手机av | 伊人88 | 成人在线免费看视频 | 六月综合| 日本中文字幕在线看 | 成人视屏在线 | 一区二区三区av夏目彩春 | 猎艳山村丰满少妇 | 亚洲羞羞| 女王人厕视频2ⅴk | 亚洲最大av在线 |