简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
1.前言
本篇目的:C++之容器std::stack类empty、size、top、push、emplace、pop、swap应用总结。
1.C++提供了多种容器类型,以下是一些常见的C++容器:
-
向量(vector):动态数组,支持快速随机访问和动态大小调整。
-
链表(list):双向链表,支持高效的插入和删除操作。
-
堆栈(stack):后进先出(LIFO)的数据结构,只能在顶部进行插入和删除。
-
队列(queue):先进先出(FIFO)的数据结构,只能在前端插入,在后端删除。
-
双端队列(deque):双端队列,支持在前端和后端进行插入和删除。
-
集合(set):集合中的元素是唯一的,并且按特定排序规则进行存储。
-
映射(map):键值对的集合,每个键只能在映射中出现一次。
-
哈希表(unordered_set、unordered_map):基于散列函数实现的集合和映射。
这些容器都属于STL(标准模板库)的一部分,每个容器都有其特定的用途和适用场景。选择适当的容器能够提高程序的效率和可读性。
2.std::stack是C++ STL(标准模板库)中提供的容器类,用于实现栈数据结构。下面是对std::stack类中一些常用的成员函数的作用解释,不包含代码示例:
-
empty(): 返回一个布尔值,表示栈是否为空。如果栈为空,则返回true;否则,返回false。
-
size(): 返回一个整数值,表示栈中元素的个数。
-
top(): 返回栈顶元素的引用,但不删除该元素。如果栈为空,调用该函数将导致未定义的行为。
-
push(): 接收一个元素,并将其添加到栈顶。新元素被添加后,成为新的栈顶元素。
-
emplace(): 类似于push()函数,但是可以在栈中构造元素,而无需创建临时对象。
-
pop(): 移除栈顶元素,但不返回它的值。如果栈为空,调用该函数将导致未定义的行为。
-
swap(): 将当前的栈与另一个栈进行交换。交换后,两个栈中的元素也会互相交换。
2.应用实例
1. empty():判断堆栈是否为空。
#include <iostream>
#include <stack>
int main() {
std::stack<int> myStack;
if (myStack.empty()) {
std::cout << "Stack is empty." << std::endl;
} else {
std::cout << "Stack is not empty." << std::endl;
}
return 0;
}
2. size():获取堆栈中元素的数量。
#include <iostream>
#include <stack>
int main() {
std::stack<int> myStack;
myStack.push(1);
myStack.push(2);
myStack.push(3);
std::cout << "Size of stack: " << myStack.size() << std::endl;
return 0;
}
3. top():获取堆栈顶部元素的值。
#include <iostream>
#include <stack>
int main() {
std::stack<int> myStack;
myStack.push(1);
myStack.push(2);
myStack.push(3);
int topElement = myStack.top();
std::cout << "Top element of stack: " << topElement << std::endl;
return 0;
}
4. push():将元素压入堆栈的顶部。
#include <iostream>
#include <stack>
int main() {
std::stack<int> myStack;
myStack.push(1);
myStack.push(2);
myStack.push(3);
std::cout << "Size of stack after pushing elements: " << myStack.size() << std::endl;
return 0;
}
5. emplace():在堆栈的顶部就地构造元素。
#include <iostream>
#include <stack>
class MyClass {
public:
MyClass(int value) : data(value) {
std::cout << "Constructor called for value: " << data << std::endl;
}
private:
int data;
};
int main() {
std::stack<MyClass> myStack;
myStack.emplace(1);
myStack.emplace(2);
myStack.emplace(3);
return 0;
}
6. pop():移除堆栈顶部的元素。
#include <iostream>
#include <stack>
int main() {
std::stack<int> myStack;
myStack.push(1);
myStack.push(2);
myStack.push(3);
myStack.pop();
std::cout << "Size of stack after popping element: " << myStack.size() << std::endl;
return 0;
}
7. swap():交换两个堆栈的内容。
#include <iostream>
#include <stack>
int main() {
std::stack<int> stack1;
std::stack<int> stack2;
stack1.push(1);
stack1.push(2);
stack1.push(3);
stack2.push(4);
stack2.push(5);
std::cout << "Size of stack1 before swap: " << stack1.size() << std::endl;
std::cout << "Size of stack2 before swap: " << stack2.size() << std::endl;
stack1.swap(stack2);
std::cout << "Size of stack1 after swap: " << stack1.size() << std::endl;
std::cout << "Size of stack2 after swap: " << stack2.size() << std::endl;
return 0;
}