1. 程式人生 > 實用技巧 >STL之deque容器和 stack容器

STL之deque容器和 stack容器

  deque容器是雙端陣列,既可以向頭部插入或者刪除也可以向尾部插入或者刪除。

  1. deque與vector的區別;

vector對於頭部插入刪除效率低,deque相比於vector,由於在頭部插入刪除時不用移動大量的元素,效率較高;

    訪問元素時,vector的速度比deque快,這和他們的內部結構有關。vector內部是一段連續的空間。而deque的

    工作原理如下所示

  deque內部的中控器,維護每段緩衝區中內容,中控器裡的每個節點對應一個緩衝區,每個節點儲存的是每段緩衝區地址。看起來像一片連續的儲存空間。

   2. deque的建構函式

    

1
deque<int> d1; //預設構造 2 3 deque<int> d2(d1.begin(),d1.end()); //區間構造 4 5 deque<int > d3(10,20); //n個ele的方式構造 6 7 deque<int> d4(d1) ;//拷貝構造

  3. deque容器的賦值操作

 1 deque<int >d1;
 2 
 3 deque<int>d2;
 4 d2=d1;  //operator=
 5 
 6 //assign
 7 
 8 deque<int> d3;
 9 d3.assign(d2.begin(),d2.end());  //
以區間方式 10 11 dequeu<int> d4; 12 d4.assign(10,100);

  4.deque容器大小操作

1 deque<int> d1;
2 //判斷容器是否為空,如果為空返回true
3 d1.empty();
4 //容器的大小,它沒有容量的概念
5 d1.size();
6 //重新指定大小
7 d1.resize(10); //預設按0填充
8 d1.resize(10,1);//超出部分按1填充

  5. deque插入和刪除

 1 deque<int>d1;
 2 d1.push_back(1);//尾插
 3 d1.push_front(2);//
頭插 4 5 d1.pop_back();//刪除容器中的最後一個元素 6 d1.pop_front();//刪除容器中的第一個元素 7 8 insert(pos,elem); //在指定位置插入一個元素 9 insert(pos,n,elem); //指定位置插入n個ele; 10 insert(pos,d1.begin(),d1.end()); //知道位置插入區間元素 11 12 clear();//清空 13 erase(d1.begin(),d1.end()); //相當於clear,返回下一個資料的位置 14 erase(pos); //刪除某一個位置,返回下一個位置

  6. 資料存取,通過at(),[],front(),back()可以訪問到相應的元素

  7. deque容器排序  

 1     deque<int>d1;
 2     //尾插
 3     d1.push_back(10);
 4     d1.push_back(20);
 5     //頭插
 6     d1.push_front(30);
 7     d1.push_front(40);
 8     d1.push_back(20);
 9         
10     sort(d1.begin(), d1.end()); //預設升序 vector同意適用

stack容器是一種先進後出的容器

 1 stack <int> s;
 2 //入棧
 3 s.push(1);
 4 s.push(2);
 5 //判斷是否為空
 6 s.empty();
 7 //出棧
 8 s.pop();
 9 //返回棧頂元素
10 s.top();
11 //返回棧的大小
12 s.size();