stl-栈、队列基本操作函数

博客介绍了栈和队列的基本操作。栈的操作包括判断是否为空、移除栈顶元素、在栈顶增加元素、返回元素数目和栈顶元素;队列操作有获取队首和队尾元素、队首元素出队、检测是否为空及返回元素个数,使用队首队尾操作时需先判断队列是否为空。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


empty() 堆栈为空则返回真
pop() 移除栈顶元素
push() 在栈顶增加元素
size() 返回栈中元素数目
top() 返回栈顶元素

队列
front(),back()
获取队首,队尾元素,时间复杂度为O(1)
pop()
队首元素出队,时间复杂度为O(1)
empty()
检测queue是否为空,返回bool类型,true为空。
size()
返回queue内元素个数
注:使用front()和back()的时候,必须判断队列是否为空,!empty()或size()>0。

### C++ STL `priority_queue` 的基本用法 #### 头文件引入 在使用 `priority_queue` 之前,需要包含对应的头文件: ```cpp #include <queue> ``` 这是因为 `priority_queue` 是标准模板库的一部分,位于 `<queue>` 中[^2]。 --- #### 定义方式 `priority_queue` 可以通过以下方式进行定义: 1. 默认的大顶堆(从大到小排序): ```cpp std::priority_queue<int> pq; ``` 2. 小顶堆(从小到大排序),可以通过指定比较函数来实现: ```cpp std::priority_queue<int, std::vector<int>, std::greater<int>> minPq; ``` 上述代码中,第二个参数表示底层容器类型(通常为 `std::vector` 或其他支持随机访问的容器),第三个参数用于自定义比较逻辑[^4]。 --- #### 基本操作方法 以下是 `priority_queue` 的一些常用成员函数及其功能说明: 1. **插入元素** 使用 `push()` 方法向队列中插入新元素。 ```cpp pq.push(5); ``` 2. **获取顶部元素** 调用 `top()` 返回当前优先级最高的元素(注意:此操作不会移除该元素)。对于大顶堆来说,返回的是最大值;而对于小顶堆,则返回最小值。 ```cpp int highestPriorityElement = pq.top(); ``` 3. **删除顶部元素** 使用 `pop()` 移除并丢弃当前优先级最高的元素。 ```cpp pq.pop(); ``` 4. **判断是否为空** 利用 `empty()` 检查队列是否为空。 ```cpp if (pq.empty()) { // 队列为空时执行的操作 } ``` 5. **获取大小** 调用 `size()` 获取当前队列中的元素数量。 ```cpp size_t queueSize = pq.size(); ``` 以上这些操作的时间复杂度均为 O(log n),其中 n 表示当前队列内的元素总数[^3]。 --- #### 示例程序 下面是一个完整的例子,演示如何创建、填充以及遍历一个 `priority_queue`: ```cpp #include <iostream> #include <queue> int main() { // 创建一个默认的大顶堆 std::priority_queue<int> maxHeap; // 插入若干整数 maxHeap.push(10); maxHeap.push(30); maxHeap.push(20); // 输出堆的内容直到它变空为止 while (!maxHeap.empty()) { std::cout << "Top element is: " << maxHeap.top() << '\n'; maxHeap.pop(); // 删除顶端元素 } return 0; } ``` 运行结果将是按降序打印出所有的数值[^1]。 --- #### 自定义比较器 当希望改变默认的行为或者处理更复杂的对象时,可以提供自己的比较器。例如,假设我们想基于字符串长度构建一个小根堆: ```cpp #include <iostream> #include <queue> #include <string> struct CompareStringLength { bool operator()(const std::string& a, const std::string& b) const { return a.length() > b.length(); // 升序排列依据长度 } }; int main() { // 使用自定义比较器的小根堆 std::priority_queue<std::string, std::vector<std::string>, CompareStringLength> stringMinHeap; stringMinHeap.push("hello"); stringMinHeap.push("world!"); stringMinHeap.push("hi"); while (!stringMinHeap.empty()) { std::cout << "String with smallest length so far: \"" << stringMinHeap.top() << "\"\n"; stringMinHeap.pop(); } return 0; } ``` 这里展示了如何灵活调整数据结构行为的能力。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值