stack
栈
先入后出,只有top的一个元素是可见的。在前面c语言部分已有图示,参考
https://www.cnblogs.com/qifeng1024/p/12512765.html
惯例引入头文件
#include <stack>
首先定义一个栈
stack<string> s;
这样做是没有问题的。
但是我也可以在声明这个栈同时也规定底层容器
stack<string,list(string)> s;
同时也可以在声明的时候初始化这个栈
vector<int> a{1,2,3,4}; stack<int> s1; stack<int ,vector<int>> s2; stack<int ,vector<int>> s3(a);
成员函数如下:
这是网页自己翻译的其中有的不是很准
int main() { vector<int> a{1,2,3,4,5,6,7,8}; stack<int ,vector<int>> s(a); cout<<"size : "<<s.size()<<endl; //栈大小 if(s.empty()) //判断栈是否空 { cout<<"empty : empty"<<endl; } else { cout<<"empty : full"<<endl; } cout<<"top data is : "<<s.top()<<endl; //访问栈顶元素 s.pop(); //移除栈顶元素 cout<<"size : "<<s.size()<<endl; //栈大小 cout<<"top data is : "<<s.top()<<endl; //访问栈顶元素 s.push(199); //在栈顶加入元素 cout<<"size : "<<s.size()<<endl; //栈大小 cout<<"top data is : "<<s.top()<<endl; //访问栈顶元素 s.emplace(17); //栈顶加入元素 cout<<"size : "<<s.size()<<endl; //栈大小 cout<<"top data is : "<<s.top()<<endl; //访问栈顶元素 }
emplace函数直接构造而非拷贝元素。
调用insert或者push函数时,将对象当做参数传递,这些对象被拷贝到容器中。
调用emplace函数时,将对象传递给对应元素类型的构造函数,直接在内存中构造对象。
empalce会在容器管理的内存空间中直接创建对象,调用push则会创建一个临时对象,然后将其压入容器。
显然这种方式更适合将类插入到某容器中,而且会调用构造函数,这就需要那个类有合适的构造函数,参数必须能匹配构造函数。