C++復習(三):STLライブラリのdeque、stack、queue、priority_queueコンテナ
本文の主な参考https://blog.csdn.net/weixin_34128839/article/details/91686932
Queue,stackはdequeに基づいて実現され,いずれもシーケンスコンテナであり,ランダムアクセスをサポートする.priority_queueはvectorに基づいて実現され,下位データ構造はスタックである.
一般的に最小ヒープ、最大ヒープが必要な場合はpriority_queueで実現します.
一般的にキューを使用する必要がある場合はqueueで実現できます.
一般的にスタックを使用する必要がある場合はstackで実現できます.
一般的に双方向キューを使用する必要がある場合はdequeで実現できます.
次の段落のためにリストを紹介します.Listの本質は双方向チェーンテーブルであり,メモリ空間が不連続でポインタによる操作である.
dequeはdouble-ended queueであり、複数の連続メモリブロックから構成され、dequeはlistとvectorの互換性であり、複数のブロックに分けられ、各ブロックサイズは512バイトであり、ブロックはmapブロックによって管理され、mapブロックには各ブロックのヘッダアドレスが保存される.そのため、このコンテナにはインデックス操作operator[]もあり、効率はvectorほど高くありません.またdequeはvectorより多くpush_front()とpop_front()操作は,両端でこの操作を行うとlistとの効率があまり悪くない.
1、構築と付与
2、大きさ
一般的には使用されません.キューやスタックのサイズにはあまり注目しません.空であるかどうかだけに注目します.
3、インスタック、アウトスタック、インキュー、アウトキュー、エンドポイント値の取得
4、判断が空か
5、priority_queueの優先度設定
キュー内の要素がint、stringなどの比較可能な要素である場合、上記のメンバー関数を直接使用できます.
キュー内の要素がstruct,classなどの要素である場合は、比較関数(たとえば、番号オペレータより小さい)を再ロードします.詳細については、https://blog.csdn.net/hellokandy/article/details/81458663.
Queue,stackはdequeに基づいて実現され,いずれもシーケンスコンテナであり,ランダムアクセスをサポートする.priority_queueはvectorに基づいて実現され,下位データ構造はスタックである.
一般的に最小ヒープ、最大ヒープが必要な場合はpriority_queueで実現します.
一般的にキューを使用する必要がある場合はqueueで実現できます.
一般的にスタックを使用する必要がある場合はstackで実現できます.
一般的に双方向キューを使用する必要がある場合はdequeで実現できます.
次の段落のためにリストを紹介します.Listの本質は双方向チェーンテーブルであり,メモリ空間が不連続でポインタによる操作である.
dequeはdouble-ended queueであり、複数の連続メモリブロックから構成され、dequeはlistとvectorの互換性であり、複数のブロックに分けられ、各ブロックサイズは512バイトであり、ブロックはmapブロックによって管理され、mapブロックには各ブロックのヘッダアドレスが保存される.そのため、このコンテナにはインデックス操作operator[]もあり、効率はvectorほど高くありません.またdequeはvectorより多くpush_front()とpop_front()操作は,両端でこの操作を行うとlistとの効率があまり悪くない.
1、構築と付与
#include
//#include stack queue deque
#include
#include //queue priority_queue
#include
using namespace std;
// int,string , struct class
//deque vector 。
deque dq1(5, "hello"); // 5、 "hello" deque
deque dq2 = { 9,5,2,7 }; // deque {9,5,2,7}
// , dequeue
deque dq3;
queue q1; // queue。 , 。
stack st1; // stack。 , 。
priority_queue pr_q1; // priority_queue。 , 。 , / 。
priority_queue, less> pr_q2; // , 。 。
priority_queue, greater> pr_q3; // , , / 。
// , ,
//dq2[1] = 6; //dq2 {9,6,2,7}
2、大きさ
一般的には使用されません.キューやスタックのサイズにはあまり注目しません.空であるかどうかだけに注目します.
dq2.size() // dq2 , dq2 , 4。
dq2.max_size() // 。 , , , 。 。
3、インスタック、アウトスタック、インキュー、アウトキュー、エンドポイント値の取得
//dequeue,
dq3.push_back(2); // 。 {2}
dq3.push_front(5); // 。 {5,2}
dq3.back(); // 。 2
dq3.front(); // 。 5
dq3.pop_back(); // 。 {5}
dq3.pop_front(); // 。 {}
//queue,
q1.push(2); // 。 {2}
q1.push(5); // 。 {2,5}
q1.back(); // 。 5
q1.front(); // 。 2
q1.pop(); // 。 {5}
//stack,
st1.push(2); // 。 {2}
st1.push(5); // 。 {2,5}
st1.top(); // 。 5
st1.pop(); // 。 {2}
//priority_queue,
// , , 。
pr_q1.push(2); // 。 {2}
pr_q1.push(5); // 。 {5,2}
pr_q1.push(3); // 。 {5,3,2}
pr_q1.top(); // 。 5
pr_q1.pop(); // 。 {3,2}
4、判断が空か
dq2.empty(); // , True, False。
q1.empty();
st1.empty();
pr_q1.empty();
5、priority_queueの優先度設定
キュー内の要素がint、stringなどの比較可能な要素である場合、上記のメンバー関数を直接使用できます.
キュー内の要素がstruct,classなどの要素である場合は、比較関数(たとえば、番号オペレータより小さい)を再ロードします.詳細については、https://blog.csdn.net/hellokandy/article/details/81458663.