C++之STL整理(8)之stack用法(创建、赋值、增删查改)详解
C++之STL整理(8)之stack用法(创建、赋值、增删查改)详解
注:整理一些突然学到的C++知识,随时mark一下
例如:忘记的关键字用法,新关键字,新数据结构
C++ 的stack整理
- C++之STL整理(8)之stack用法(创建、赋值、增删查改)详解
- stack
- 1. stack 构造函数
- 1. stack构造函数
- 2. stack赋值操作
- 3. stack数据存取操作
- 4. stack大小操作
- 总结
提示:本文为 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的接口相对简单,但它却非常灵活,可以适应各种应用场景。