当前位置: 首页 > news >正文

C++STL概览

一、核心组成模块

1. 容器体系(Containers)
  • 序列容器

    • vector:动态数组(随机访问O(1),尾部插入O(1))
    • deque:双端队列(支持高效首尾插入)
    • list:双向链表(任意位置插入O(1),但无随机访问)
    • forward_list(C++11):单向链表(内存占用更小)
  • 关联容器

    • map/set:红黑树实现的有序容器(查找O(logN))
    • multimap/multiset:允许重复键值
  • 无序容器(C++11)

    • unordered_map/unordered_set:哈希表实现(平均查找O(1))
    • 支持自定义哈希函数与等价谓词
  • 容器适配器

    • stack:默认基于deque实现的后进先出结构
    • queue:先进先出队列(可基于list优化)
    • priority_queue:堆结构实现的最大优先级队列

2. 算法框架(Algorithms)
  • 泛型算法设计

    • 解耦数据与操作:通过迭代器接口统一访问容器
    • 典型算法:
      • 排序:sort(快速排序)、stable_sort(归并排序)
      • 查找:find(线性搜索)、binary_search(二分查找)
      • 数值运算:accumulate(累加)、partial_sum(前缀和)
  • 策略定制

    • 支持自定义比较器(如greater<>改变排序顺序)
    • 谓词函数:find_if等算法可配合lambda表达式

3. 迭代器机制(Iterators)
  • 类型体系

    迭代器类型支持操作典型容器
    输入迭代器只读、单遍扫描istream_iterator
    输出迭代器只写、单遍扫描ostream_iterator
    前向迭代器多遍扫描forward_list
    双向迭代器支持--操作list/map
    随机访问迭代器支持+n跳转vector/array
  • 迭代器适配器

    • reverse_iterator:逆向遍历容器
    • insert_iterator:实现容器元素的批量插入

二、关键扩展组件

1. 函数对象与Lambda
  • 函数对象(Functors)

    struct Compare {
      bool operator()(int a, int b) const { 
        return abs(a) < abs(b); 
      }
    };
    sort(v.begin(), v.end(), Compare());
    
  • Lambda表达式(C++11)

    auto lambda = [threshold](int x) { return x > threshold; };
    auto it = find_if(v.begin(), v.end(), lambda);
    
2. 智能指针体系(C++11)
  • unique_ptr

    • 独占所有权模型,支持自定义删除器
    auto ptr = std::make_unique<MyClass>(args);
    
  • shared_ptr

    • 引用计数实现共享所有权
    • weak_ptr解决循环引用问题
3. 字符串增强
  • string_view(C++17)
    • 非拥有字符串视图,避免不必要的拷贝
    void process(std::string_view sv) {
      // 可接受string、char[]等多种输入
    }
    

三、系统级支持

1. 输入输出系统
  • 流层次结构

  • 高级特性

    • 本地化支持(std::locale
    • 格式化控制(std::format C++20)
2. 并发编程模型
  • 线程管理

    std::jthread worker([](std::stop_token st) { // C++20
      while(!st.stop_requested()) {
        // 后台任务
      }
    });
    
  • 原子操作

    std::atomic<int> counter{0};
    counter.fetch_add(1, std::memory_order_relaxed);
    
3. 数值计算工具
  • 随机数库(C++11)

    std::mt19937 gen(std::random_device{}());
    std::uniform_int_distribution<> dis(1, 6);
    int dice_roll = dis(gen); 
    
  • 复数运算

    std::complex<double> z(2, 3); // 2+3i
    

四、现代演进方向

C++标准演进

版本关键特性
C++11移动语义、lambda、智能指针
C++17结构化绑定、并行算法
C++20概念约束(Concepts)、协程
C++23堆栈踪(stacktrace)、mdspan

设计哲学

  1. 泛型编程范式

    • 通过模板实现算法与数据类型的完全解耦
    • 例:sort算法可处理任何支持<操作的类型
  2. 零开销原则

    • 抽象不带来额外运行时开销(如vector与原生数组性能相当)
  3. 可扩展接口

    • 允许用户自定义类型融入标准库生态(如实现迭代器接口与容器交互)

我们在努力扩大自己,以靠近,以触及我们自身以外的世界。 —博尔赫斯谈话录

相关文章:

  • React 之 Redux 第二十八节 学习目标与规划大纲及概要讲述
  • C#将Box企业网盘里的文件批量上载到S3,并导入Redshift
  • Docker卷挂载:为何不同路径指向同一份文件
  • 准确---Liunx查看出口ip的命令
  • 【FPGA开发】Verilog-数据截断时实现四舍五入效果
  • 机器学习数学基础:38.统计学变量与相关系数
  • MybatisPlus从入门到精通
  • 【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(未成功版)
  • Linux--基础命令3
  • 解决docker认证问题 failed to authorize: failed to fetch oauth token
  • 【Office-Word】如何自动生成中英文目录
  • 决策树(Decision Tree):机器学习中的经典算法
  • 用vscode开发微信云函数一键打包cloudfunctions(vite创建)
  • for循环相关(循环的过程中对数据进行删除会踩坑)
  • wxWidgets长图浏览控件实现,不区分图片类型加载
  • 低空监视-无人机专用ADS-B应答机
  • CSS设置文字渐变色样式(附带动画效果)
  • Vue.js事件处理
  • 利用python开发自己的小工具
  • c++线程池的实现
  • 做网站赚广告/关键词组合工具
  • 邢台网站建设行情/女孩子做运营是不是压力很大
  • 做面食网站/北京口碑最好的it培训机构
  • 谁做彩票网站代理/百度app官方正式版
  • 怎么接网站来做/新闻投稿平台
  • 建立英文网站/免费个人主页网站