当前位置:网站首页>[hand torn STL] Stack & queue
[hand torn STL] Stack & queue
2022-06-25 06:05:00 【The August】
stack&queue
stack Introduction and use of
- stack Is a container adapter , Specifically used in context with LIFO operations , The deletion can only be performed by inserting and extracting elements from one end of the container .
- stack Is implemented as a container adapter , A container adapter is a container that encapsulates a specific class as its underlying container , And provide a specific set of member functions to access its elements , Use a specific class as its underlying , The tail of an element specific container ( The top of the stack ) Pressed and ejected .
- stack The underlying container can be any standard container class template or some other specific container class , These container classes should support the following operations :
- empty: Empty operation
- back: Get tail element operation
- push_back: Tail insert element operation
- pop_back: Tail delete element operation
- Standard containers vector、deque、list All meet these needs , By default , If not for stack Specify a specific underlying container , By default deque.

notes :stack and queue It's the adapter ( adapter ), Is implemented by transformation , It is not implemented directly , It is implemented by encapsulating other container packaging transformations
stack Use

void test_stack()
{
stack<int> st;
st.push(1);
st.push(2);
st.push(3);
st.push(4);
cout << st.size() << endl;
while (!st.empty())
{
cout << st.top() << " ";
st.pop();
}
cout << endl;
cout << st.size() << endl;
}
stack Simulation Implementation of
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<deque>
#include<vector>
#include<list>
using namespace std;
namespace lc
{
template<class T,class Container=deque<T>>
//stack It's a container adapter ( Encapsulation conversion ) Coming out
class stack
{
public:
void push(const T& x)
{
_con.push_back(x);
}
void pop()
{
_con.pop_back();
}
const T& top()
{
return _con.back();
}
size_t size()
{
return _con.size();
}
bool empty()
{
return _con.empty();
}
private:
Container _con;
};
}
queue Introduction and use of
- A queue is a container adapter , Used exclusively in FIFO Context ( fifo ) In the operation , Where the element is inserted from one end of the container , Extract the element at the other end .
- Queues are implemented as container adapters , The container adapter encapsulates a specific container class as its underlying container class ,queue Provide a specific set of member functions to access its elements . Elements are queued from the end of the queue , Get out of the queue from the head of the queue .
- The underlying container can be one of the standard container class templates , It can also be other specially designed container classes . The bottom container shall support at least the following operations :
- empty: Check if the queue is empty
- size: Returns the number of valid elements in the queue
- front: Returns a reference to the queue header element
- back: Returns a reference to the end of the queue element
- push_back: Enter the queue at the end of the queue
- pop_front: Get out of the queue at the head of the queue
- Standard container class deque and list Meet these requirements . By default , If not for queue Instantiate the specified container class , Use standard containers deque.

queue Use

void test_queue()
{
queue<int> q;
q.push(1);
q.push(2);
q.push(3);
q.push(4);
cout << q.size() << endl;
while (!q.empty())
{
cout << q.front() << " ";
q.pop();
}
cout << endl;
cout << q.size() << endl;
}
queue Simulation Implementation of
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<deque>
#include<vector>
#include<list>
using namespace std;
namespace lc
{
template<class T, class Container = deque<T>>
//queue It's a container adapter ( Encapsulation conversion ) Coming out
class queue
{
public:
void push(const T& x)
{
_con.push_back(x);
}
void pop()
{
_con.pop_front();
}
const T& front()
{
return _con.front();
}
const T& back()
{
return _con.back();
}
size_t size()
{
return _con.size();
}
bool empty()
{
return _con.empty();
}
private:
Container _con;
};
}
Container adapter
An adapter is a design pattern ( Design patterns are a set of things that are used repeatedly 、 Most people know that 、 Catalogued 、 Summary of code design experience ), This pattern is to convert the interface of one class into another interface that the customer wants .
notes : although stack and queue You can also store elements in , But in STL It is not divided into the ranks of containers in , Instead, call it a container adapter , This is because stack And queues just wrap the interfaces of other containers ,STL in stack and queue By default deque


Add :
vector( Continuous physical space ):
advantage :
- Random access
- CPU High cache hit rate
shortcoming :
- Space is not enough , Need to increase capacity , Increasing capacity costs a lot , There is also a certain waste of space
- Head and middle insert delete , Low efficiency O(N)
list:
advantage :
- Apply for space on demand to free up space
- Inserting and deleting data anywhere is O(1) Efficient
shortcoming :
- Random access is not supported
- CPU Low cache hit rate
deque Advantages and disadvantages :
- deque , Description is very suitable for head plug removal , Tail insertion and tail deletion , To do stack and queue The default adapter container for
- Insert and delete data in the middle of the double ended queue , It's troublesome and inefficient (1. Move the overall data 、2. Move current buff data – Record each buff Size of array , Every buff The array size is inconsistent )
- deque It's a compromise design , Not extreme enough , Random access is less efficient than vector, Insert delete at any position list
- A pile of data needs to be sorted vector、 Insert and delete at any position list、 Head and tail insert delete multi-purpose deque
notes : combination list and vector Advantages and disadvantages , Can improve the design Central control array ( Pointer array )、 Fixed length buff Array data structure deque
边栏推荐
- Vscode voice notes to enrich information (medium)
- MySQL tuning --01--- optimization steps and system performance parameters
- Data7202 statistical analysis
- Vscode voice notes to enrich information (Part 1)
- Create a complete binary tree in array order
- Ifconfig command – displays or sets network devices
- Guava new collection type
- Rhcsa--- day 6 operation
- Cat command – display the file contents on the terminal device
- Solve some prompt codes that pychar cannot recognize selenium
猜你喜欢

Use of MySQL variables

Day21 JMeter usage basis

Rhcsa--- day 6 operation

Add the author watermark plugin v1.4 update to the posts of elegant grass discuz plugin - some forums post errors and bugs have been fixed

What happens when redis runs out of memory
[interview with a large factory] meituan had two meetings. Was there a surprise in the end?
Part 34 of SAP ui5 application development tutorial - device adaptation of SAP ui5 application based on device type
Linus' speech recordings, which were lost in 1994, were made public
How SAP ui5 device type detection device API works

Gavin's insight on transformer live class - line by line analysis and field experiment analysis of insurance BOT microservice code of insurance industry in the actual combat of Rasa dialogue robot pro
随机推荐
Copying DNA
PAT (Advanced Level) Practice 1025
Day22 send request and parameterization using JMeter
MV command – move or rename files
[JS basic review] scope, this, closure
[QT] for multithreaded programs, do not use the printf() function to print out
Grep command – powerful text search tool
D compile time reflection
Introduction to the main features of kyma when the cloud native application runs
MySQL tuning --01--- optimization steps and system performance parameters
Count the grid
MySQL tuning -- 02 -- slow query log
Leetcode sword finger offer question brushing - day 27
Aiot project that is an introduction to the basics of the Internet of things and can be implemented in practice
Tablespace free space
What is the use of the subprocess module
Mount command - file system mount
Gavin's insight on transformer live class - line by line analysis and field experiment analysis of insurance BOT microservice code of insurance industry in the actual combat of Rasa dialogue robot pro
What are the reasons why most webmasters choose Hong Kong site group servers?
50 days countdown! Are you ready for the Landbridge cup provincial tournament?