STL容器——stack
程序员文章站
2022-07-12 14:37:38
...
STL容器——stack
1、stack概念
-
stack是一种先进后出的数据结构,它只有一个出口。stack容器允许新增元素,移除元素,取得栈顶元素,且只能取最顶端元素。也即,stack不需要有遍历行为。元素压入栈的操作叫push,元素推出stack的操作叫pop。
-
因为stack不可以遍历,只有顶端元素才可以被获取,因此,stack也不存在迭代器。
2、stack构造函数
- stack<T’> stkT;//stack采用模板类实现
- stack(const stack &stk);//拷贝构造函数
stack<int> stk;//一个存放int的stack容器
stack<string> stk;//一个存放string的stack容器
stack<int> stkIntA;
stkIntA.push(1);
stkIntA.push(3);
stkIntA.push(5);
stkIntA.push(7);
stkIntA.push(9);
stack<int> stkIntB(stkIntA); //拷贝构造
3、stack赋值操作
- stack operator=(const stack &stk);//重载等号操作符
stack<int> stkIntA;
stkIntA.push(1);
stkIntA.push(3);
stkIntA.push(5);
stkIntA.push(7);
stkIntA.push(9);
stack<int> stkIntC;
stkIntC = stkIntA; //赋值
4、stack数据存取
- push(elem);//向栈顶添加元素
- pop();//从栈顶移除第一个元素
- top();//返回栈顶元素
stack<int> stkInt;
stkInt.push(1);
stkInt.push(3);
stkInt.pop();
stkInt.push(5);
stkInt.push(7);
stkInt.push(9);
stkInt.pop();
stkInt.pop();//此时 stkInt 存放的元素是 1,5
stkInt.top();//5
5、stack大小操作
- empty();//判断栈是否为空
- size();//返回栈的大小
stack<int> stkIntA;
stkIntA.push(1);
stkIntA.push(3);
stkIntA.push(5);
stkIntA.push(7);
stkIntA.push(9);
if (!stkIntA.empty())
{
int iSize = stkIntA.size(); //5
}
6、入栈出栈
//stack 容器中放入普通数据型元素
void test1()
{
stack<int> s;
//入栈
for (int i = 0; i<10; i++)
{
s.push(i + 1);
}
cout << "栈的大小" << s.size() << endl;
//出栈
while (!s.empty())
{
int tmp = s.top(); //获取栈顶元素
cout <<tmp << " ";
s.pop(); //弹出栈顶元素
}
}
//stack 容器中放入类的对象元素
void test2()
{
Teacher t1, t2, t3; //定义三个类的对象
t1.age = 10;
t2.age = 12;
t3.age = 15;
stack<Teacher> s;
s.push(t1); //往栈中放入 类对象元素
s.push(t2);
s.push(t3);
while (!s.empty())
{
Teacher tmp = s.top();
tmp.printT(); //打印栈中放入的对象的年龄
s.pop();
}
}
//stack 容器中放入类的对象的指针元素
void test3()
{
Teacher t1, t2, t3;
t1.age = 10;
t2.age = 12;
t3.age = 15;
stack<Teacher *> s; //栈中放入类的指针
s.push(&t1);
s.push(&t2);
s.push(&t3);
while (!s.empty())
{
Teacher *p = s.top();
p->printT();
s.pop();
}
}