一、基本概念
这种数据结构使用LIFO技术,其中LIFO表示后进先出。首先插入的元素将在末尾提取,以此类推。有一个名为“top”的元素,它是位于最上面位置的元素。所有插入和删除操作都是在堆栈的顶部元素本身进行的。
语法:
template<class T, class Container = deque<T> > class stack;
模板参数
T:参数指定容器适配器将保留的元素的类型。
Container:参数指定容器的内部对象,用于容纳堆栈的元素。
成员类型
value_type:指定了元素类型。
container_type:指定了基础容器类型。
size_type:它指定元素的大小范围。
二、常用函数
2.1、push函数
该函数用于在堆栈顶部插入新元素。
void push (const value_type& value)
stack<int> a;//a为空
a.push(1);//a中元素:1
2.2、pop函数
该函数用于删除元素,堆栈中的元素从顶部删除。
void pop()
stack<int> a;//a为空
a.push(1);//a中元素:1
a.push(2);//a中元素:2,1
a.pop();//a中元素:1
2.3、top函数
该函数用于访问堆栈的顶部元素。该元素起着非常重要的作用,因为所有插入和删除操作都是在顶部元素上执行的。
value_type& top();
const value_type& top() const;
stack<int> a;//a为空
a.push(1);//a中元素:1
a.push(2);//a中元素:2,1
int b = a.top();//b为2,a中元素不改变
2.4、size函数
该函数返回堆栈容器的大小,该大小是堆栈中存储的元素数量的度量。
size_type size() const
stack<int> a;//a为空
a.push(1);//a中元素:1
a.push(2);//a中元素:2,1
int b = a.size();//b为2
2.5、empty函数
该函数用于测试堆栈是否为空。如果堆栈为空,则该函数返回true,否则返回false。
bool empty() const;
stack<int> a;//a为空
bool b = a.empty();//返回true
a.push(1);//a中元素:1
b = a.empty();//返回false
2.6、emplace函数
该函数用于在当前顶部元素上方的堆栈中插入新元素。。
template <class… Args> void emplace (Args&&… args);
args:参数转发用于构造新元素的参数。也就是说,由args指定的元素将插入到当前顶部元素上方的堆栈中。现在,新插入的元素成为顶部元素,并且所有推入和弹出操作都在其上执行。
与push的区别:
push的元素必须是已经构造好的对象,而emplace可以直接传入构造对象需要的元素,然后自己调用其构造函数!
stack<int> a;//a为空
a.emplace(1);//a中元素:1