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();
}