C++之STL整理(8)之stack用法(创建、赋值、增删查改)详解

C++之STL整理(8)之stack用法(创建、赋值、增删查改)详解

注:整理一些突然学到的C++知识,随时mark一下
例如:忘记的关键字用法,新关键字,新数据结构



提示:本文为 C++ 中 stack构造、赋值、接口 的写法和举例


stack

  stack(栈)是STL的一个容器适配器,它提供了后进先出(LIFO, Last In First Out)的栈数据结构。stack在内部通常使用deque或list或vector作为底层容器来存储元素,但stack只提供了访问栈顶元素的接口,隐藏了底层容器的其他功能。

1. stack 构造函数

下面将基于您提供的函数接口,详细解释stack的各个成员函数,并给出相应的例子。

1. stack构造函数

stack<T> stkT;:这是stack的默认构造函数,它会创建一个空的栈。

例子:

#include <stack>  
#include <iostream>  
  
int main() {  
    std::stack<int> stkInt; // 创建一个空的int类型的栈  
    return 0;  
}

stack(const stack &stk);:这是拷贝构造函数,用于创建一个新栈,它是现有栈的副本。

#include <stack>  
#include <iostream>  
  
int main() {  
    std::stack<int> stk1;  
    stk1.push(1);  
    stk1.push(2);  
      
    std::stack<int> stk2(stk1); // 创建一个stk1的副本stk2  
      
    std::cout << stk2.top() << std::endl; // 输出2  
    return 0;  
}

2. stack赋值操作

stack& operator=(const stack &stk);:这是赋值操作符的重载,用于将一个栈的内容赋给另一个栈。

#include <stack>  
#include <iostream>  
  
int main() {  
    std::stack<int> stk1;  
    stk1.push(1);  
    stk1.push(2);  
      
    std::stack<int> stk2;  
    stk2 = stk1; // 将stk1的内容赋给stk2  
      
    std::cout << stk2.top() << std::endl; // 输出2  
    return 0;  
}

3. stack数据存取操作

push(elem);:将元素elem压入栈顶。

例子:

#include <stack>  
#include <iostream>  
  
int main() {  
    std::stack<int> stk;  
    stk.push(1); // 压入1  
    stk.push(2); // 压入2  
    return 0;  
}

pop();:移除栈顶的元素。

#include <stack>  
#include <iostream>  
  
int main() {  
    std::stack<int> stk;  
    stk.push(1);  
    stk.push(2);  
    stk.pop(); // 移除2  
    std::cout << stk.top() << std::endl; // 输出1  
    return 0;  
}

top();:返回栈顶元素的引用,但不移除它。

#include <stack>  
#include <iostream>  
  
int main() {  
    std::stack<int> stk;  
    stk.push(1);  
    stk.push(2);  
    std::cout << stk.top() << std::endl; // 输出2  
    return 0;  
}

4. stack大小操作

empty();:检查栈是否为空,如果为空则返回true,否则返回false。

#include <stack>  
#include <iostream>  
  
int main() {  
    std::stack<int> stk;  
    std::cout << (stk.empty() ? "Empty" : "Not Empty") << std::endl; // 输出Empty  
    stk.push(1);  
    std::cout << (stk.empty() ? "Empty" : "Not Empty") << std::endl; // 输出Not Empty  
    return 0;  
}

size();:这个函数返回栈中当前元素的个数。

#include <stack>  
#include <iostream>  
  
int main() {  
    std::stack<int> stk;  
      
    stk.push(1);  
    stk.push(2);  
    stk.push(3);  
      
    std::cout << "Size of stack: " << stk.size() << std::endl; // 输出3  
      
    stk.pop();  
      
    std::cout << "Size after popping: " << stk.size() << std::endl; // 输出2  
      
    return 0;  
}

注意事项
stack容器提供了基本的后进先出(LIFO)操作,但不提供直接访问栈中除栈顶之外元素的方法。即只能访问栈顶部。
当你需要遍历栈的内容时,通常需要将元素逐个弹出并处理,或者使用一个额外的容器来复制栈的内容。
stack的底层实现通常依赖于deque,但你也可以指定其他的底层容器类型,比如list或vector,通过模板参数来实现。
总结
stack是STL中一个简单但非常有用的容器适配器,它提供了一组基本操作来管理后进先出的数据结构。通过使用这些操作,你可以轻松地实现一些常见的算法和数据结构问题。尽管stack的接口相对简单,但它却非常灵活,可以适应各种应用场景。

总结

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值