STL之deque容器和 stack容器
阿新 • • 發佈:2020-09-20
deque容器是雙端陣列,既可以向頭部插入或者刪除也可以向尾部插入或者刪除。
- deque與vector的區別;
vector對於頭部插入刪除效率低,deque相比於vector,由於在頭部插入刪除時不用移動大量的元素,效率較高;
訪問元素時,vector的速度比deque快,這和他們的內部結構有關。vector內部是一段連續的空間。而deque的
工作原理如下所示
deque內部的中控器,維護每段緩衝區中內容,中控器裡的每個節點對應一個緩衝區,每個節點儲存的是每段緩衝區地址。看起來像一片連續的儲存空間。
2. deque的建構函式
1deque<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();