1.简介
stack ,栈(堆栈),是一种先进后出(First In Last Out,FILO)的数据结构,先插入的数据在栈底,后放入的数据在栈顶,所有的数据只能从栈顶取出。
在生活中先进后出的例子友很多,例如我们在桌子上摞书,先放的在最下面,后放的在最上面。在取书的时候也是先取最后放的,最才能取到第一个放的。
栈容器中,只有栈顶数据才可以被外界访问,因此stack不存在遍历。
2.栈容器使用示例
- stack(栈)容器特性
- 先进后出(后进先出) --类似与往袋子中装东西,先放进去的在最下面,最后放进行的可以先拿出来;第一个放进去的 —>栈底最后一个放进的—>栈顶
- stack只允许从栈顶取数据
- stack容器无法对数据进行排序sort,但可以判断容器是否为空empty,可以计算元素的个数size;
- 相关函数
stack构造函数:
默认构造:stack< T > stk;
拷贝构造:stack(const stack &p);stack赋值
运算符号重载:operator=()stack入栈与出栈
入栈(在容器尾部插入元素):emplace()
入栈(在容器尾部插入元素): push()
出栈:pop()
查看栈顶元素:top()
判断容器是否为空:empty()
获取元素个数:size()
交换元素:swap()
- 使用示例
#include <iostream>
#include <stack>
using namespace std;
void test()
{
//创建一个stack容器
stack<int> stk;
//入栈
stk.push(10);
stk.push(20);
stk.push(30);
stk.push(40);
stk.emplace(100);
stack<int>stk3(stk);//拷贝构造
cout << "stk元素个数:" << stk.size() << endl;
//查看stk元素
while (!stk.empty())
{
cout << stk.top() << " ";//查看栈顶元素
stk.pop();//出栈
}
cout << endl;
stack<int>stk2 = stk;//赋值
if (stk2.empty())
{
cout << "stk2为空" << endl;
}
//入栈
stk2.push(111);
stk2.push(222);
stk2.swap(stk3);
//查看stk2元素
cout << "skt2栈内容:" << endl;
while (!stk2.empty())
{
cout << stk2.top() << " ";//查看栈顶元素
stk2.pop();//出栈
}
cout << endl;
//查看stk3元素
cout << "skt3栈内容:" << endl;
while (!stk3.empty())
{
cout << stk3.top() << " ";//查看栈顶元素
stk3.pop();//出栈
}
cout << endl;
}
int main()
{
test();
system("pause");
}
3.stack自定义类型示例
#include <iostream>
#include <stack>
using namespace std;
class Person
{
friend ostream& operator<<(ostream& cout,Person p);//友元
public:
//构造函数
Person(int age,string name):age(age),name(name){
}
private:
int age;
string name;
};
ostream& operator<<(ostream& cout,Person p)
{
cout<<"姓名:"<<p.name<<"\t年龄:"<<p.age;
return cout;
}
void test()
{
stack<Person> st1;
//入栈
st1.emplace(18,"小王");
st1.push(Person(20,"小刘"));
st1.emplace(25,"阿水");
cout<<"st1成员个数:"<<st1.size()<<endl;
//出栈
while(!st1.empty())
{
cout<<"取栈顶元素:"<<st1.top()<<endl;
st1.pop();//出栈
}
}
int main()
{
test();
}