STL之stack 【栈】
- 头文件
- 创建stack
- 添加元素(插入元素)
- 删除元素(弹出元素)
- 访问元素
- 检查栈是否为空:
- 获取栈的大小
- 遍历C++中stack
- 用c语言实现栈
stack:栈,后进先出(LIFO)的数据结构。适用于需要在容器的末尾执行插入和删除操作的情况.
头文件
#include <stack>
创建stack
std::stack<int> myStack; // 创建一个整数类型的栈
添加元素(插入元素)
myStack.push(42);
myStack.push(17);
删除元素(弹出元素)
myStack.pop(); // 弹出顶部元素
访问元素
使用 top
函数访问栈的顶部元素,但不会从栈中移除它:
int topElement = myStack.top(); // 访问栈顶部元素
检查栈是否为空:
if (myStack.empty()) {std::cout << "Stack is empty." << std::endl;
} else {std::cout << "Stack is not empty." << std::endl;
}
获取栈的大小
size_t stackSize = myStack.size(); // 获取栈的大小
#include <iostream>
#include <stack>int main() {std::stack<int> myStack;myStack.push(42);myStack.push(17);int topElement = myStack.top();std::cout << "Top element: " << topElement << std::endl;myStack.pop();if (myStack.empty()) {std::cout << "Stack is empty." << std::endl;} else {std::cout << "Stack is not empty." << std::endl;}return 0;
}
遍历C++中stack
在C++的STL中,std::stack
并没有提供公开的迭代器接口,因此无法直接通过迭代器来遍历栈。实际上,std::stack
设计为在特定情况下隐藏了其底层容器的实现细节,并且它的迭代器是被封装的,无法直接访问。如果你需要遍历栈中的元素,最好的方法是将栈的内容弹出到一个临时容器(如std::vector
或std::deque
)中,然后使用该容器的迭代器进行遍历。
#include <iostream>
#include <stack>
#include <vector>int main() {std::stack<int> myStack;myStack.push(10);myStack.push(20);myStack.push(30);// 将栈中的元素弹出并存储到vector中std::vector<int> tempVector;while (!myStack.empty()) {tempVector.push_back(myStack.top());myStack.pop();}// 使用vector的迭代器从栈顶到栈底遍历std::cout << "Stack elements from top to bottom: ";for (auto it = tempVector.rbegin(); it != tempVector.rend(); ++it) {std::cout << *it << " ";}std::cout << std::endl;return 0;
}
用c语言实现栈
#include <stdio.h>
#include <stdlib.h>#define MAX_SIZE 100typedef struct {int arr[MAX_SIZE];int top;
} Stack;// 初始化栈
void initializeStack(Stack* stack) {stack->top = -1;
}// 判断栈是否为空
int isEmpty(Stack* stack) {return stack->top == -1;
}// 判断栈是否已满
int isFull(Stack* stack) {return stack->top == MAX_SIZE - 1;
}// 入栈操作
void push(Stack* stack, int value) {if (isFull(stack)) {printf("Stack overflow\n");return;}stack->arr[++(stack->top)] = value;
}// 出栈操作
int pop(Stack* stack) {if (isEmpty(stack)) {printf("Stack underflow\n");return -1; // 表示栈为空}return stack->arr[(stack->top)--];
}// 获取栈顶元素,不弹出
int peek(Stack* stack) {if (isEmpty(stack)) {printf("Stack is empty\n");return -1; // 表示栈为空}return stack->arr[stack->top];
}int main() {Stack myStack;initializeStack(&myStack);push(&myStack, 10);push(&myStack, 20);push(&myStack, 30);printf("Top element: %d\n", peek(&myStack));printf("Popped element: %d\n", pop(&myStack));printf("Popped element: %d\n", pop(&myStack));printf("Top element: %d\n", peek(&myStack));return 0;
}
那么stack的用法就讲到这里,下一章看multiset的用法。关注我,为大家持续分享更多的内容,让学习变得更简单,与君共勉,共同成长。