STL新增内容

文章目录

      • C++11 中的 STL 新增内容
        • 容器
        • 算法
      • C++14 中的 STL 新增内容
        • 容器
        • 算法
      • C++17 中的 STL 新增内容
        • 容器
        • 算法
      • C++20 中的 STL 新增内容
        • 容器
        • 算法

C++11 中的 STL 新增内容

容器
  • std::array:这是一个固定大小的数组容器,和原生数组类似,但具备更好的接口与安全性。它在栈上分配内存,大小在编译时确定。
#include <array>
#include <iostream>
int main() {std::array<int, 5> arr = {1, 2, 3, 4, 5};for (int num : arr) {std::cout << num << " ";}return 0;
}
  • std::unordered_setstd::unordered_map:这两个容器分别是 std::setstd::map 的无序版本。它们采用哈希表实现,查找、插入和删除操作的平均时间复杂度为 O ( 1 ) O(1) O(1)
#include <unordered_set>
#include <iostream>
int main() {std::unordered_set<int> us = {1, 2, 3};for (int num : us) {std::cout << num << " ";}return 0;
}
  • std::forward_list:这是一个单向链表容器,相比于 std::list(双向链表),它占用的空间更少,插入和删除操作更快。
算法
  • std::all_ofstd::any_ofstd::none_of:这些算法用于检查范围中的元素是否满足特定条件。
#include <algorithm>
#include <vector>
#include <iostream>
int main() {std::vector<int> vec = {1, 2, 3, 4, 5};bool all_positive = std::all_of(vec.begin(), vec.end(), [](int i) { return i > 0; });std::cout << (all_positive ? "All positive" : "Not all positive") << std::endl;return 0;
}

C++14 中的 STL 新增内容

容器
  • std::make_unique:用于创建 std::unique_ptr 对象,提供了更简洁的方式来管理动态分配的内存。
#include <memory>
#include <iostream>
class MyClass {
public:MyClass() { std::cout << "Constructed" << std::endl; }~MyClass() { std::cout << "Destroyed" << std::endl; }
};
int main() {auto ptr = std::make_unique<MyClass>();return 0;
}
算法
  • 泛型 lambda 表达式:允许 lambda 表达式的参数使用 auto 类型,增强了 lambda 表达式的通用性。
#include <iostream>
int main() {auto add = [](auto a, auto b) { return a + b; };std::cout << add(1, 2) << std::endl;std::cout << add(1.5, 2.5) << std::endl;return 0;
}

C++17 中的 STL 新增内容

容器
  • std::optional:表示一个可能存在的值,可用于避免返回空指针或错误码。
#include <optional>
#include <iostream>
std::optional<int> divide(int a, int b) {if (b == 0) {return std::nullopt;}return a / b;
}
int main() {auto result = divide(10, 2);if (result) {std::cout << "Result: " << *result << std::endl;} else {std::cout << "Division by zero" << std::endl;}return 0;
}
  • std::variant:可以存储多种不同类型的值,但同一时间只能存储其中一种类型。
#include <variant>
#include <iostream>
#include <string>
int main() {std::variant<int, std::string> var = 10;std::cout << std::get<int>(var) << std::endl;var = "Hello";std::cout << std::get<std::string>(var) << std::endl;return 0;
}
  • std::any:可以存储任意类型的值。
#include <any>
#include <iostream>
#include <string>
int main() {std::any value = 10;std::cout << std::any_cast<int>(value) << std::endl;value = std::string("Hello");std::cout << std::any_cast<std::string>(value) << std::endl;return 0;
}
算法
  • std::clamp:用于将一个值限制在指定的范围内。
#include <algorithm>
#include <iostream>
int main() {int value = 15;int min = 10;int max = 20;int result = std::clamp(value, min, max);std::cout << "Clamped value: " << result << std::endl;return 0;
}

C++20 中的 STL 新增内容

容器
  • std::span:表示一个连续对象序列的视图,不拥有这些对象,常用于函数参数传递,避免不必要的拷贝。
#include <span>
#include <iostream>
#include <vector>
void print(std::span<int> sp) {for (int num : sp) {std::cout << num << " ";}std::cout << std::endl;
}
int main() {std::vector<int> vec = {1, 2, 3, 4, 5};print(vec);return 0;
}
算法
  • 范围库(Ranges Library):提供了一种更简洁、更通用的方式来处理序列数据,结合了算法和迭代器的功能。
#include <iostream>
#include <vector>
#include <ranges>
int main() {std::vector<int> vec = {1, 2, 3, 4, 5};auto even_numbers = vec | std::views::filter([](int i) { return i % 2 == 0; });for (int num : even_numbers) {std::cout << num << " ";}return 0;
}

这些新增内容使得 STL 更加完善和强大,为 C++ 开发者提供了更多高效、便捷的工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/899787.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#测试Excel开源组件ExcelDataReader

使用微软的com组件Microsoft.office.Interop.Excel读写Excel文件虽然可用&#xff0c;但是列多、行多的时候速度很慢&#xff0c;之前测试过Sylvan.Data.Excel包的用法&#xff0c;如果只是读取Excel文件内容的话&#xff0c;还可以使用ExcelDataReader包&#xff0c;后者是C#开…

位置编码汇总 # 持续更新

看了那么多还没有讲特别好的&#xff0c;GPT老师讲的不错关于三角函数编码。 一、 手撕transformer常用三角位置编码 GPT说&#xff1a;“低维度的编码&#xff08;例如&#xff0c;第一个维度&#xff09;可以捕捉到大的位置差异&#xff0c;而高维度的编码则可以捕捉到小的细…

Java 模块系统深度解析

Java 模块系统深度解析 Java 模块系统&#xff08;Java Platform Module System, JPMS&#xff09;是 Java 9 引入的一项重要特性&#xff0c;它从根本上改变了 Java 应用程序的打包和依赖管理方式。本文将全面介绍 Java 模块系统的核心概念、优势及实际应用。 一、为什么需要…

蓝桥杯杯赛-日期模拟

知识点 处理日期 1. 按天枚举日期&#xff1a;逐天遍历起始日期到结束日期范围内的每个日期。 2. 处理闰年&#xff1a;正确判断闰年条件。闰年定义为&#xff1a;年份 满足以下任意一个条件&#xff1a;(闰年的2月只有29天) 满足下面一个条件就是闰年 1> 是 400 的倍数…

.Net中对称加密的实现

常见对称加密算法及优缺点 1. DES&#xff08;Data Encryption Standard&#xff09; 优点&#xff1a;是最早被广泛应用的加密算法&#xff0c;算法公开&#xff0c;实现简单&#xff0c;效率较高。缺点&#xff1a;密钥长度较短&#xff08;56 位&#xff09;&#xff0c;在…

SQLMesh调度系统深度解析:内置调度与Airflow集成实践

本文系统解析SQLMesh的两种核心调度方案&#xff1a;内置调度器与Apache Airflow集成。通过对比两者的适用场景、架构设计和操作流程&#xff0c;为企业构建可靠的数据分析流水线提供技术参考。重点内容包括&#xff1a; 内置调度器的轻量级部署与性能优化策略Airflow集成的端到…

centos线程数查看

查看当前最大支持的线程数 cat /proc/sys/kernel/threads-max当前用户进程可以创建的最大线程数&#xff08;包括子进程&#xff09; [rootlocalhost tmp]# ulimit -u得到当前实际的线程数 [rootlocalhost tmp]# ps -eLf | wc -l统计每个进程的总线程数前20的数据 [rootloc…

【大模型】视觉语言模型:Qwen2.5-VL的使用

官方github地址&#xff1a;https://github.com/QwenLM/Qwen2.5-VL 目录 Qwen家族的最新成员&#xff1a;Qwen2.5-VL 主要增强功能 模型架构更新 快速开始 使用Transformers聊天 Docker Qwen家族的最新成员&#xff1a;Qwen2.5-VL 主要增强功能 强大的文档解析功能&am…

HDMI接口设计

1. HDMI简介 HDMI(High Definition Multimedia Interface)高清多媒体接口,是首个支持在单线缆上传输,不经过压缩的全数字高清晰度、多声道音频和智能格式与控制命令数据的数字接口。这个接口可以同时传输视频信号、音频信号和控制信号。 从上图里面可以看到HDMI有3组数据信号…

C/C++ JSON 库综合对比及应用案例(六)

第六部分&#xff1a;C/C JSON 库综合对比及应用案例 &#x1f4e2; 快速掌握 JSON&#xff01;文章 视频双管齐下 &#x1f680; 如果你觉得阅读文章太慢&#xff0c;或者更喜欢 边看边学 的方式&#xff0c;不妨直接观看我录制的 JSON 课程视频&#xff01;&#x1f3ac; …

LXC 导入(Rockylinux,almalinux,oraclelunx,debian,ubuntu,openEuler,kail,opensuse)

前提要求 ubuntu下安装lxd 参考Rockylinux下安装lxd 参考LXC 源替换参考LXC 容器端口发布参考LXC webui 管理<

Spring MVC 页面跳转方案与区别

SpringMVC 的页面跳转方案主要分为 ‌转发&#xff08;Forward&#xff09;‌ 和 ‌重定向&#xff08;Redirect&#xff09;‌ 两类&#xff0c;具体实现方式和区别如下&#xff1a; 一、页面跳转方案 1. ‌转发&#xff08;Forward&#xff09;‌ 默认方式‌&#xff1a;直…

基于Spring Boot的轻型卡车零部件销售平台的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

高性能计算面经

高性能计算面经 C八股文真景一面凉经自我介绍&#xff0c;介绍一下你做过的加速的模块(叠噪&#xff0c;噪声跟原图有什么关系&#xff1f;)OpenGL和OpenCL有什么区别&#xff1f;**1. 核心用途****2. 编程模型****3. 硬件抽象****4. API设计****5. 典型应用场景****6. 互操作性…

青少年编程与数学 02-014 高中数学知识点 07课题、专业相关性分析

青少年编程与数学 02-014 高中数学知识点 07课题、专业相关性分析 一、函数与微积分1. 函数与初等函数2. 导数与优化 二、概率与统计1. 概率基础2. 统计推断3. 随机变量与分布 三、几何与代数1. 向量与矩阵运算2. 复数与坐标变换 四、数学建模与算法思维1. 数学建模2. 算法逻辑…

11乱码问题的解释(2)

这个字符串使用哪种方式编码的?---看包含在哪个文件中 和当前 mylabel.cpp 文件的编码方式是一致的~~ 如果这里显示的是 UTF-8&#xff0c;说明这个文件就是UTF-8 编码 如果显示的是 ANSI,说明这个文件就是 GBK 编码~ Qt Creator 内置的终端是 utf8 的方式来显示字符串吗?? …

我的机器学习学习之路

学习python的初衷 • hi&#xff0c;今天给朋友们分享一下我是怎么从0基础开始学习机器学习的。 • 我是2023年9月开始下定决心要学python的&#xff0c;目的有两个&#xff0c;一是为了提升自己的技能和价值&#xff0c;二是将所学的知识应用到工作中去&#xff0c;提升工作…

27--当路由器学会“防狼术“:华为设备管理面安全深度解剖(完整战备版)

当路由器学会"防狼术"&#xff1a;华为设备管理面安全深度解剖&#xff08;完整战备版&#xff09; 引言&#xff1a;网络世界的"门神"进化论 “从前有个路由器&#xff0c;它把所有数据包都当好人&#xff0c;直到有一天…” ——《悲惨世界网络版》 如果…

Docker容器网络相关设置

确认容器是否正确启动 首先&#xff0c;确保 MySQL 容器正在运行。可以使用 docker ps 查看当前正在运行的容器。如果 MySQL 容器没有启动&#xff0c;可以尝试以下命令启动它&#xff1a; docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORDrootpassword mysql:8 这…

hive相关面试题以及答案

什么是Hive&#xff1f;它的作用是什么&#xff1f; 答&#xff1a;Hive是一个建立在Hadoop之上的数据仓库工具&#xff0c;它提供了类似于SQL的查询语言HiveQL来操作存储在Hadoop中的数据。Hive的主要作用是让用户能够使用SQL语法来查询和分析大规模数据集。 Hive的架构是什么…