文章目录
- 1.stack的介绍
- 2.stack的使用
- 2.1stack构造函数
- 2.1stack成员函数
- (1)empty() 检测stack是否为空
- (2)size() 返回stack中元素的个数
- (3)top() 返回栈顶元素的引用
- (4)push() 将元素val压入stack中
- (5)pop() 将stack中尾部的元素弹出
1.stack的介绍
stack的介绍
1.stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。
2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。
3. stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:
empty:判空操作
back:获取尾部元素操作
push_back:尾部插入元素操作
pop_back:尾部删除元素操作
4. 标准容器vector、deque、list均符合这些需求,默认情况下,如果没有为stack指定特定的底层容器,默认情况下使用deque。
2.stack的使用
2.1stack构造函数
stack类是一个容器适配器,它是基于其他容器类型(默认情况下是deque)实现的。stack类提供了一种后进先出(LIFO)的数据结构,类似于真实生活中的堆栈。
#include <iostream>
#include <stack>
#include <vector>
int main() {
// 示例1:使用默认构造函数创建一个空的stack对象。
std::stack<int> myStack;
// 示例2:使用拷贝构造函数创建一个与现有stack对象相同的新对象。
std::stack<int> otherStack;
otherStack.push(1);
otherStack.push(2);
std::stack<int> newStack(otherStack);
// 示例3:使用构造函数模板创建一个基于vector的stack对象。
std::stack<int, std::vector<int>> intStack;
intStack.push(10);
intStack.push(20);
// 输出示例2中新创建的stack对象的元素
std::cout << "示例2中新创建的stack对象的元素:";
while (!newStack.empty()) {
std::cout << newStack.top() << " ";
newStack.pop();
}
std::cout << std::endl;
// 输出示例3中基于vector的stack对象的元素
std::cout << "示例3中基于vector的stack对象的元素:";
while (!intStack.empty()) {
std::cout << intStack.top() << " ";
intStack.pop();
}
std::cout << std::endl;
return 0;
}
//示例2中新创建的stack对象的元素:2 1
//示例3中基于vector的stack对象的元素:20 10
2.1stack成员函数
(1)empty() 检测stack是否为空
empty()是stack类的一个成员函数,用于检查当前的stack是否为空。当stack中没有任何元素时,empty()函数返回true;当stack中至少有一个元素时,empty()函数返回false。
empty()函数的使用非常简单,只需在一个stack对象上调用该函数即可。以下是empty()函数的用法示例:
#include <iostream>
#include <stack>
int main() {
std::stack<int> myStack;
// 检查stack是否为空
if (myStack.empty()) {
std::cout << "Stack is empty" << std::endl;
} else {
std::cout << "Stack is not empty" << std::endl;
}
// 将元素压入stack
myStack.push(10);
myStack.push(20);
// 再次检查stack是否为空
if (myStack.empty()) {
std::cout << "Stack is empty" << std::endl;
} else {
std::cout << "Stack is not empty" << std::endl;
}
return 0;
}
//Stack is empty
//Stack is not empty
(2)size() 返回stack中元素的个数
size()是stack类的一个成员函数,用于获取当前stack中的元素数量。size()函数返回一个整数,表示stack中的元素数目。
size()函数的使用非常简单,只需在一个stack对象上调用该函数即可。以下是size()函数的用法示例:
#include <iostream>
#include <stack>
int main() {
std::stack<int> myStack;
// 添加元素到stack
myStack.push(10);
myStack.push(20);
myStack.push(30);
// 获取stack中的元素数量
int stackSize = myStack.size();
std::cout << "Stack size: " << stackSize << std::endl;
// 弹出一个元素
myStack.pop();
// 再次获取stack中的元素数量
stackSize = myStack.size();
std::cout << "Stack size after pop: " << stackSize << std::endl;
return 0;
}
//Stack size: 3
//Stack size after pop: 2
(3)top() 返回栈顶元素的引用
top()是stack类的一个成员函数,用于获取stack顶部(即最后压入的)的元素的值,而不会将该元素从stack中移除。
top()函数的使用非常简单,只需在一个stack对象上调用该函数即可。以下是top()函数的用法示例:
#include <iostream>
#include <stack>
int main() {
std::stack<int> myStack;
// 添加元素到stack
myStack.push(10);
myStack.push(20);
myStack.push(30);
// 获取stack顶部的元素值
int topElement = myStack.top();
std::cout << "Top element: " << topElement << std::endl;
return 0;
}
//Top element: 30
(4)push() 将元素val压入stack中
push()是stack类的一个成员函数,用于将一个元素压入(即添加)到stack的顶部。
push()函数的使用非常简单,只需在一个stack对象上调用该函数并传递要压入的元素作为参数即可。以下是push()函数的用法示例:
#include <iostream>
#include <stack>
int main() {
std::stack<int> myStack;
// 将元素压入stack
myStack.push(10);
myStack.push(20);
myStack.push(30);
// 获取stack顶部的元素值
int topElement = myStack.top();
std::cout << "Top element: " << topElement << std::endl;
return 0;
}
//Top element: 30
(5)pop() 将stack中尾部的元素弹出
pop()是stack类的一个成员函数,用于移除stack顶部(即最后压入的)的元素,但并不返回该元素的值。
pop()函数的使用非常简单,只需在一个stack对象上调用该函数即可。以下是pop()函数的用法示例:
#include <iostream>
#include <stack>
int main() {
std::stack<int> myStack;
// 添加元素到stack
myStack.push(10);
myStack.push(20);
myStack.push(30);
// 移除stack顶部的元素
myStack.pop();
// 获取新的stack顶部的元素值
int topElement = myStack.top();
std::cout << "Top element after pop: " << topElement << std::endl;
return 0;
}
//Top element after pop: 20