鱼C论坛

 找回密码
 立即注册
查看: 1806|回复: 0

[学习笔记] 047-C++之STL-->stack

[复制链接]
发表于 2018-9-19 19:22:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1、stack简介
stack是栈容器,是一种“先进后出”的容器。
stack是简单的修饰deque容器而成的另外一种容器。
为了严格遵循堆栈的数据后进先出原则,stack 不提供元素的任何迭代器操作,因此,stack 容器也就不会向外部提供可用的前向或反向迭代器类型。
2、stack操作
1.构造函数
默认构造函数创建空栈。  stack<int> s1;
拷贝构造函数创建相同的栈。   stack<int> s2(s1);
2. 入栈   void push(const value_type& x);
    出栈   void pop();
    获取栈顶元素  value_type&  top();
    判断栈是否为空  bool  empty();
    获取栈的元素数目  int size();
入栈、出栈基本数据类型:
  1. string str1 = "0123456789";
  2. stack<int>  sta1;
  3. for (auto each : str1)
  4. {
  5.         sta1.push(int(each));   // 入栈
  6. }
  7. cout << "栈的大小:" << sta1.size() << endl;

  8.        
  9. while (!sta1.empty())
  10. {
  11.         int tmp = sta1.top();   // 获取栈顶元素
  12.         sta1.pop();       //出栈
  13.         cout << tmp << " ";
  14. }
复制代码

入栈出栈类对象和指针(注意深浅拷贝问题):
  1. class Teacher
  2. {
  3. public:
  4.         int age;
  5.         char name[23];
  6.         Teacher(char* str, int _age)
  7.         {
  8.                 strcpy_s(name, str);
  9.                 age = _age;
  10.         }
  11.         void printT()
  12.         {
  13.                 cout << "name:" << name << "     " << "age:" << age << endl;
  14.         }
  15. };

  16. int main()
  17. {
  18.         Teacher t1("t1", 31), t2("t2", 32), t3("t3", 33);
  19.         stack<Teacher> sta2;    // 装结构体
  20.         stack<Teacher*> sta3;
  21.         sta2.push(t1);    // 入栈
  22.         sta2.push(t2);
  23.         sta2.push(t3);

  24.         sta3.push(&t1);
  25.         sta3.push(&t2);
  26.         sta3.push(&t3);

  27.         while (!sta2.empty())
  28.         {
  29.                 Teacher tmp = sta2.top();
  30.                 sta2.pop();
  31.                 tmp.printT();
  32.         }

  33.         while (!sta3.empty())
  34.         {
  35.                 Teacher *tmp = sta3.top();
  36.                 sta3.pop();
  37.                 tmp->printT();
  38.         }

  39.         system("pause");
  40.         return 0;
  41. }
复制代码

3、stack小结
        1.  堆栈是一种应用非常广泛的数据结构。C++ STL 将这种数据结构和它若干受限制操作用泛型类 stack 容器封装出来,包括堆栈初始化、元素入栈、取栈顶元素、元素出栈、判断堆栈是否非空和取得当前堆栈大小等,应用起来十分容易。
        2.  stack的元素出栈操作是不返回栈顶元素的,需要另外通过取栈顶函数获得。这种分离实现是考虑到出栈函数若直接返回栈顶元素,将会导致返回值的数据引用安全问题或不必要的低效复制函数的调用。
        3.  从 stack 内部实现看,stack 堆栈是不设最大容量的,但可通过 size 函数获取当前堆栈的大小,以判断是否允许继续让元素入栈,实现具有最大容量限制的堆栈。


   

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-23 15:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表