C++STL入門のDeque,Stack,Queue


1.Dequeコンテナ1.1 Deque紹介1)dequeは「double-ended queue」の略であり、vectorと同様にSTLのコンテナであり、dequeは両端配列であり、vectorは片端である.2)dequeはインタフェース上でvectorとよく似ており,多くの操作の場所で直接置き換えることができる.3)dequeはランダムに要素にアクセスできます(インデックス値の直接アクセスをサポートし、[]オペレータまたはat()メソッドを使用します.これは後述します).4)dequeヘッダとテールの要素の追加または削除は非常に迅速です.ただし、エレメントを中央に挿入したり除去したりするのに時間がかかります.5)ヘッダファイルはdeque
1.2 dequeオブジェクトの作成dequeはテンプレートクラスで実現され、dequeオブジェクトのデフォルト構造形式:deque deq;deque deqInt;//intを格納するdequeコンテナ.deque deq Float;//floatを格納するdequeコンテナです.deque deq String;//stringを格納するdequeコンテナです.//カッコ内では、ポインタタイプまたはカスタムタイプを設定することもできます.
1.3 dequeの最後の追加除去操作API deque.push_back(elem);//コンテナの末尾にデータdequeを追加します.push_front(elem);//コンテナヘッダにデータdequeを挿入する.pop_back();//コンテナの最後のデータdequeを削除します.pop_front();//コンテナの最初のデータを削除
1.4 dequeのデータアクセスdeque.at(idx);//インデックスidxが指すデータを返し、idxが境界を越えた場合out_を投げ出すof_range. deque[idx];//インデックスidxが指すデータを返します.idxが境界を越えて異常を投げ出さないと、直接エラーが発生します.deque.front();//最初のデータを返します.deque.back();//最後のデータを返す
1.5 dequeと反復器deque.begin();//コンテナ内の最初の要素の反復器を返します.deque.end();//コンテナ内の最後の要素の後にある反復器を返します.deque.rbegin();//コンテナ内の最後から最初の要素の反復器を返します.deque.rend();//コンテナの最後の要素の後ろにある反復器を返します.
1.6 dequeオブジェクトのパラメータ付きdeque(beg,end);//コンストラクション関数は[beg,end)区間の要素を自身にコピーします.この区間は左閉右開の区間であることに注意してください.deque(n,elem);//コンストラクション関数はn個のelemを自身にコピーします.deque(const deque&deq);//コピーコンストラクション関数.
1.7 dequeの付与deque.assign(beg,end);//[beg,end)区間のデータコピーを自分に割り当てます.この区間は左閉右開の区間であることに注意してください.deque.assign(n,elem);//n個のelemコピーを自分に割り当てます.deque&operator=(const deque&deq)//等号オペレータdeque.swap(deq)//vecを自分の要素と交換します
1.8 dequeのサイズdeque.size();//コンテナ内の要素の数dequeを返します.empty();//容器が空のdequeであるか否かを判断する.resize(num);//コンテナの長さをnumに再指定し、コンテナが長くなると新しい位置をデフォルト値で塗りつぶします.コンテナが短くなると、最後にコンテナの長さを超えた要素が削除されます.deque.resize(num, elem);//コンテナの長さをnumに再指定し、コンテナが長くなるとelem値で新しい位置を埋めます.コンテナが短くなると、最後にコンテナの長さを超えた要素が削除されます.
1.9 dequeの挿入deque.insert(pos,elem);//posの場所にelem要素のコピーを挿入し、新しいデータの場所を返します.deque.insert(pos,n,elem);//pos位置にn個のelemデータを挿入し、戻り値はありません.deque.insert(pos,beg,end);//pos位置に[beg,end)区間のデータを挿入し,戻り値はない.
1.10 dequeの削除deque.clear();//コンテナのすべてのデータを削除します.erase(beg,end);//[beg,end)区間のデータを削除し、次のデータの位置を返します.deque.erase(pos);//pos位置のデータを削除し、次のデータの位置を返します.
1.11コード例
#include 
#include 
#include 
using namespace std;

int main()
{
    deque<int> intde;
    deque<float> floatde(3,8);
    deque<string> stringde;
    floatde.push_back(8);
    cout << floatde.front() << endl;
    intde.push_back(8);
    cout << floatde.front() << endl;
    string s = "string";
    stringde.push_back(s);
    cout << stringde.front() << endl;
    intde.push_back(1);
    intde.push_back(2);
    intde.push_back(3);
    intde.push_back(4);
    intde.push_front(5);
    floatde.assign(5,8);
    for(deque<int>::iterator it = intde.begin(); it != intde.end(); ++it)                     
    {
        cout << *it;
        cout << " ";
    }
    cout << endl;
    for(deque<float>::iterator itf = floatde.begin(); itf != floatde.end(); ++itf) 
    {
       cout << *itf;
       cout << " ";
    }
    return 0;
}

2.stack容器2.1 stack紹介1)stackはスタック容器で、「先に入って後に出る」容器です.2)stackはdeque容器を簡単に装飾して別の容器とする.3)stackヘッダファイル
2.2 stackオブジェクトの作成stackはテンプレートクラスで実現され、stackオブジェクトのデフォルト構造形式:stack stkT;stack stkInt;//intを格納するstackコンテナ.stack stkFloat;//floatを格納するstack容器.stack stkString;//stringを保管するstack容器です.//カッコ内では、ポインタタイプまたはカスタムタイプを設定することもできます.
2.3 stackのpush()とpop()の方法stack.push(elem);//スタックヘッダに要素stackを追加します.pop();//スタックヘッダから最初の要素を除去
2.4 stackオブジェクトのコピー構造とstack(const stack&stk);//コピーコンストラクション関数stack&operator=(const stack&stk);//等号オペレータの再ロード
2.5 stackのデータアクセスstack.top();//最後の圧入スタック要素を返します
2.6 stackのサイズstack.empty();//スタックが空のstackであるか否かを判断する.size();//スタックのサイズを返す
2.7 stack単純サンプルコード
#include 
#include 
#include 
using namespace std;

class stackvar
{
public:
 int a;
 string b;
};

int main()
{
    stack<int> intstk;
    stack<stackvar> intstk1;
    stackvar var1 = stackvar(10,"a");
    stackvar var2 = stackvar(20,"b");
    intstk1.push(var1);
    intstk2.push(var2);
    stack<int> intstk2;
    intstk.push(1);
    intstk.pop();
    intstk.push(1);
    intstk.push(2);
    intstk.push(3);
    intstk.push(4); 
    stack<int> intstkcp(intstk);
    cout<<intstk.size()<<endl;
    while (!intstk.empty())
    {
        cout<<intstk.top()<<" ";
        intstk.pop();
    }
    return 0;
}

3.Queue容器3.1 Queue紹介1)queueはキュー容器であり、「先に出る」容器である.2)queueはdeque容器を簡単に装飾して別の容器とする.3)ヘッダファイルqueue
3.2 queueオブジェクトの作成queueはテンプレートクラスで実現され、queueオブジェクトのデフォルト構造形式:queue queT;queue queInt;//intを格納するqueueコンテナ.queue queFloat;//floatを格納するqueueコンテナ.queue queString;//stringを格納するqueueコンテナです.//カッコ内では、ポインタタイプまたはカスタムタイプを設定することもできます.
3.3 queueのpush()とpop()メソッドqueue.push(elem);//チームの最後に要素を追加します.pop();//キューヘッダから最初の要素を除去
3.4 queueオブジェクトのコピー構造と作成queue(const queue&que);コピーコンストラクタqueue&operator=(const queue&que);//等号オペレータの再ロード
3.5 queueのデータアクセスqueue.back();//最後の要素queueを返します.front();//最初の要素を返します
3.6 queueのサイズqueue.empty();//キューが空のqueueであるか否かを判断する.size();//キューのサイズを返します
3.7 Queue単純コードインスタンス
#include 
#include 
using namespace std;

int main()
{
    queue<int> intQue;
    queue<int> intQue1;
    intQue.push(1);
    intQue.push(2);
    intQue.push(3);
    intQue.push(4);
    intQue.push(5);
    intQue.push(6);
    queue<int> intQue2(intQue);
    cout << "intQue.front=" << intQue.front() << " " << "intQue.back=" << intQue.back() << "intQue.empty="<<intQue.empty()<<endl;
    while (!intQue.empty())
    {
        cout<<intQue.front()<<" ";
        intQue.pop();
    }
    cout << endl;
    while (!intQue2.empty())
    {
        cout << intQue2.front() << " ";
        intQue2.pop();
    }
    return 0;
}