c++STL系列——(十)Adapter

当提到C++ STL(标准模板库)中的适配器(Adapter),我们通常指的是stack、queue和priority_queue这三种容器适配器。它们提供了对底层容器(如vector、deque或list)的封装,使得可以使用不同的接口来操作数据结构。本文将深入探讨C++ STL中的这三种适配器,包括其基本特性、用法以及实际应用。

stack:栈适配器

基本特性

栈是一种后进先出(LIFO)的数据结构,stack适配器提供了对底层容器的封装,并且只能从容器的一端进行插入和删除操作。

基本操作

入栈与出栈
std::stack<int> myStack;
myStack.push(1);  // 入栈
myStack.pop();    // 出栈

实际应用

括号匹配

在编译器实现中,栈广泛用于括号匹配的检查:

bool isParenthesesValid(const std::string& s) {
    std::stack<char> myStack;
    for (char c : s) {
        if (c == '(') {
            myStack.push(c);
        } else if (c == ')') {
            if (myStack.empty() || myStack.top() != '(') {
                return false;
            } else {
                myStack.pop();
            }
        }
    }
    return myStack.empty();
}

 

queue:队列适配器

基本特性

队列是一种先进先出(FIFO)的数据结构,queue适配器提供了对底层容器的封装,并且只能从容器的一端进行插入,另一端进行删除操作。

基本操作

入队与出队
std::queue<int> myQueue;
myQueue.push(1);  // 入队
myQueue.pop();    // 出队

实际应用

广度优先搜索(BFS)

在图论和树的遍历中,队列广泛用于实现BFS算法:

void bfs(std::vector<std::vector<int>>& graph, int start) {
    std::queue<int> q;
    std::vector<bool> visited(graph.size(), false);
    q.push(start);
    visited[start] = true;
    while (!q.empty()) {
        int node = q.front();
        q.pop();
        // 处理当前节点node
        for (int neighbor : graph[node]) {
            if (!visited[neighbor]) {
                q.push(neighbor);
                visited[neighbor] = true;
            }
        }
    }
}

 

priority_queue:优先队列适配器

基本特性

优先队列适配器提供了对底层容器的封装,并且在插入元素时会根据一定的优先级规则进行自动排序。

基本操作

插入元素与取出顶部元素
std::priority_queue<int> myPriorityQueue;
myPriorityQueue.push(3);  // 插入元素
int topElement = myPriorityQueue.top();  // 取出顶部元素
myPriorityQueue.pop();  // 移除顶部元素

实际应用

任务调度

在操作系统的任务调度中,优先队列广泛用于根据任务的优先级来安排执行顺序:

struct Task {
    int priority;
    // other information
};
struct Compare {
    bool operator()(const Task& t1, const Task& t2) {
        return t1.priority < t2.priority;  // 定义优先级比较
    }
};
std::priority_queue<Task, std::vector<Task>, Compare> taskQueue;

 

总结

通过本文的介绍,你应该对C++ STL中的栈适配器stack、队列适配器queue和优先队列适配器priority_queue有了更加深入的了解。这三种适配器提供了方便的高层接口,使得我们能够更加轻松地操作数据结构,同时也能够应用到各种实际场景中。

相关推荐

  1. c++STL系列——(Adapter

    2024-02-16 01:24:02       50 阅读
  2. 密码学系列2-安全模型(CPA,CCA,selective,adaptive)

    2024-02-16 01:24:02       32 阅读
  3. adaptive原理

    2024-02-16 01:24:02       58 阅读
  4. LoRA(Low-Rank Adaptation

    2024-02-16 01:24:02       59 阅读
  5. 适配器模式(Adapter

    2024-02-16 01:24:02       64 阅读
  6. Android:View&Adapter

    2024-02-16 01:24:02       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-16 01:24:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-16 01:24:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-16 01:24:02       87 阅读
  4. Python语言-面向对象

    2024-02-16 01:24:02       96 阅读

热门阅读

  1. 评估方法:CMMI/能力成熟度模型集成

    2024-02-16 01:24:02       55 阅读
  2. 笔试刷题(持续更新)| Leetcode 45,1190

    2024-02-16 01:24:02       62 阅读
  3. 2024/2/15

    2024-02-16 01:24:02       51 阅读
  4. gorm day7

    2024-02-16 01:24:02       38 阅读
  5. 数据分析 — Pandas 分组聚合

    2024-02-16 01:24:02       46 阅读
  6. Codeforces Round 918 (Div. 4) 1

    2024-02-16 01:24:02       49 阅读
  7. C语言——oj刷题——回文字符串

    2024-02-16 01:24:02       48 阅读
  8. Integer.toHexString(b & 0xff)理解以及& 0xff什么意思

    2024-02-16 01:24:02       48 阅读
  9. 为什么USB要转TTL

    2024-02-16 01:24:02       59 阅读
  10. 项目中的任务调度和消息队列方案详解

    2024-02-16 01:24:02       44 阅读