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

c++20 的部分新概念及示例代码-Contracts,Ranges

C++20 引入了 contracts(契约),这是一种编程范式,它允许程序员在代码中添加先决条件(preconditions)、后置条件(postconditions)和断言(assertions)等契约,以提高代码的可读性、可维护性和可靠性。这些契约可以在编译时和运行时进行检查,有助于发现并修复潜在的错误。

以下是一些关于 C++20 中 contracts 的基本信息:

  1. 先决条件(Preconditions):在函数开始执行之前,检查输入参数的有效性或者环境条件的满足情况。如果前置条件不满足,则契约失败,程序可以选择中止执行或者采取其他处理方式。

    #include <cassert>void foo(int x) {assert(x > 0 && x < 100); // 先决条件// 函数体
    }
    

    后置条件(Postconditions):在函数执行结束时,检查函数返回值或者对象状态是否符合预期。如果后置条件不满足,则契约失败,程序可以选择中止执行或者采取其他处理方式。

    #include <cassert>int bar() {int result = calculate_result();assert(result >= 0); // 后置条件return result;
    }
    

    断言(Assertions):在代码中插入断言来检查某个特定条件是否满足。如果断言失败,则契约失败,程序可以选择中止执行或者采取其他处理方式。

    #include <cassert>void baz(int* ptr) {assert(ptr != nullptr); // 断言// 使用 ptr 指针
    }
    

Ranges 库,它提供了一组用于操作范围(例如容器、数组、迭代器等)的标准库组件,以更简洁、清晰和高效地处理数据。Ranges 库主要包括以下几个方面的功能和概念:

  1. 范围(Range):表示一个数据序列,可以是容器、数组、迭代器范围等。范围提供了一种统一的方式来处理数据,而不需要关心底层数据结构的具体细节。

  2. #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <ranges>int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};// 使用范围算法对范围进行操作auto result = std::ranges::transform(numbers, [](int x) { return x * 2; });// 打印结果for (int num : result) {std::cout << num << " ";}std::cout << std::endl;return 0;
    }
    

  3. 视图(View):提供了一种对范围进行转换、筛选或者映射的机制,而不会修改原始数据。视图使得数据处理操作更加灵活,并且可以链式调用多个操作。

  4. 算法(Algorithm):Ranges 库包含了一系列与范围相关的算法,如查找、排序、转换等,这些算法可以直接应用于范围上,而无需手动管理迭代器。

  5. 迭代器(Iterator):Ranges 库引入了一些新的迭代器概念,如输入迭代器、输出迭代器、前向迭代器、双向迭代器、随机访问迭代器等,以支持不同类型范围的操作。

  6. 函数式编程(Functional Programming):Ranges 库提供了一些函数式编程风格的操作,如映射(map)、过滤(filter)、折叠(fold)等,使得代码更加简洁和易读。

 

#include <iostream>
#include <vector>
#include <ranges>int main() {std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};// 使用视图过滤出偶数auto even_numbers = numbers | std::views::filter([](int x) { return x % 2 == 0; });// 使用视图转换为字符串auto str_numbers = even_numbers | std::views::transform([](int x) { return std::to_string(x); });// 打印转换后的字符串for (const auto& str : str_numbers) {std::cout << str << " ";}std::cout << std::endl;return 0;
}

我们首先定义了一个整数数组 numbers,然后使用视图过滤出其中的偶数,再使用视图将偶数转换为字符串,并最终打印转换后的字符串。这个示例展示了如何利用 Ranges 库的功能,以一种简洁和清晰的方式操作数据。

相关文章:

c++20 的部分新概念及示例代码-Contracts,Ranges

C20 引入了 contracts&#xff08;契约&#xff09;&#xff0c;这是一种编程范式&#xff0c;它允许程序员在代码中添加先决条件&#xff08;preconditions&#xff09;、后置条件&#xff08;postconditions&#xff09;和断言&#xff08;assertions&#xff09;等契约&…...

pytorch剪枝

原文&#xff1a;https://blog.51cto.com/u_16213398/10059574 Pytorch剪枝实现指南 指南概述 在这篇文章中&#xff0c;我将向你介绍如何在PyTorch中实现模型剪枝。剪枝是一种优化模型的技术&#xff0c;可以帮助减少模型的大小和计算量&#xff0c;同时保持模型的准确性。…...

马斯克旗下xAI发布Grok-1.5,相比较开源的Grok-1,各项性能大幅提升,接近GPT-4!

本文原文来自DataLearnerAI官方网站&#xff1a;马斯克旗下xAI发布Grok-1.5&#xff0c;相比较开源的Grok-1&#xff0c;各项性能大幅提升&#xff0c;接近GPT-4&#xff01; | 数据学习者官方网站(Datalearner) 继Grok-1开源之后&#xff0c;xAI宣布了Grok-1.5的内测消息&…...

数据结构与算法 顺序串的基本运算

一、实验内容 编写一个程序sqstring.cpp&#xff0c;实现顺序串的各种基本运算&#xff0c;并在此基础上实现一个程序exp7.cpp&#xff0c;完成以下功能&#xff1a; &#xff08;1&#xff09;建立串s“abcdefghefghijklmn”和串s1“xyz” &#xff08;2&#xff09;输出串…...

2024年04月数据库流行度最新排名

点击查看最新数据库流行度最新排名&#xff08;每月更新&#xff09; 2024年04月数据库流行度最新排名 TOP DB顶级数据库索引是通过分析在谷歌上搜索数据库名称的频率来创建的 一个数据库被搜索的次数越多&#xff0c;这个数据库就被认为越受欢迎。这是一个领先指标。原始数…...

golang语言系列:SOLID、YAGNI、KISS等设计原则

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 golang语言系列 文章&#xff0c;主要对编程通用技能 SOLID、YAGNI、KISS等设计原则 进行学习 1.SOLID设计原则 S&#xff1a;SRP&#xff0c;单一职责原则O&#xff1a;OCP&#xff0c;开闭原则L&#xff1a;…...

Meta Pixel:助你实现高效地Facebook广告追踪

Meta Pixel 像素代码是用來衡量Facebook广告效果的一个官方数据工具&#xff0c;只要商家有在Facebook上投放广告就需要串联Meta Pixel 像素代码来查看相关数据。 它本质上是一段 JavaScript 代码&#xff0c;安装后可以让用户在自己网站上查看到访客活动。它的工作原理是加载…...

基于Arduino IDE 野火ESP8266模块 文件系统LittleFS 的开发

一、文件系统LittleFS的介绍 LittleFS是一个为微控制器设计的轻量级、可靠且高性能的文件系统。它专为嵌入式设备打造&#xff0c;拥有占用空间小、对硬件要求低的特点&#xff0c;同时保证在断电情况下数据的完整性和稳定性。 1.设计与特点 LittleFS的设计旨在提供嵌入式系统所…...

通讯录改造———文件版本

上一篇文章我们详细讲了文件操作&#xff0c;这时候我们就可以把通讯录保存到文件中&#xff0c;这样即使程序退出了&#xff0c;联系人的信息也还是保存着&#xff0c;下一次启动程序时我们就可以把文件中的数据读取到程序中来使用。 保存 首先我们要在退出通讯录之前把联系人…...

FastAPI Web框架教程 第13章 WebSocket

13-1 WebSocket是什么 WebSocket简介&#xff1a; WebSocket是一种在单个TCP连接上进行全双工通信的协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据。 在WebSocket API中&#xff0c;浏览器和服务器只需要完成一…...

将 Elasticsearch 向量数据库引入到数据上的 Azure OpenAI 服务(预览)

作者&#xff1a;来自 Elastic Aditya Tripathi Microsoft 和 Elastic 很高兴地宣布&#xff0c;全球下载次数最多的向量数据库 Elasticsearch 是公共预览版中 Azure OpenAI Service On Your Data 官方支持的向量存储和检索增强搜索技术。 这项突破性的功能使你能够利用 GPT-4 …...

SeLinux 常见的宏

在SeLinux框架中&#xff0c;google定义好了一些宏&#xff0c;我们使用这些宏&#xff0c;开发时可以更加方便。大部分的宏是定义在te_macros文件中 type_transition type_transition source_type target_type : class default_type当主体进程域source_type 对target_type 类…...

图解PyTorch中的torch.gather函数和 scatter 函数

前言 torch.gather在目前基于 transformer or query based 的目标检测中&#xff0c;在最后获取目标结果时&#xff0c;经常用到。 这里记录下用法&#xff0c;防止之后又忘了。 介绍 torch.gather 官方文档对torch.gather()的定义非常简洁 定义&#xff1a;从原tensor中获…...

Pytorch实用教程: torch.tensor()的用法

在PyTorch中&#xff0c;torch.tensor()函数是用来创建张量&#xff08;Tensor&#xff09;的一个非常基础和重要的函数。张量是PyTorch中的基本数据结构&#xff0c;用于存储和操作数据&#xff0c;可以看作是一个高维数组。torch.tensor()函数可以从数据创建新的张量&#xf…...

Java设计模式详解:工厂模式

Java设计模式详解&#xff1a;工厂模式 文章目录 Java设计模式详解&#xff1a;工厂模式前言一、工厂模式是个啥&#xff1f;二、工厂模式怎么用&#xff1f;三、工厂模式啥时候用&#xff1f;四、工厂模式的优点总结 前言 今天咱们来聊聊设计模式中的一位重要成员——工厂模式…...

Python爬虫:爬虫常用伪装手段

目录 前言 一、设置User-Agent 二、设置Referer 三、使用代理IP 四、限制请求频率 总结 前言 随着互联网的快速发展&#xff0c;爬虫技术在网络数据采集方面发挥着重要的作用。然而&#xff0c;由于爬虫的使用可能会对被爬取的网站造成一定的压力&#xff0c;因此&#…...

【数据结构】非线性结构---二叉树

1、树 1.1 树的相关概念 节点的度&#xff1a;一个节点含有的子树的个数称为该节点的度&#xff1b; 如上图&#xff1a;A的为6 叶节点或终端节点&#xff1a;度为0的节点称为叶节点&#xff1b; 如上图&#xff1a;B、C、H、I...等节点为叶节点 非终端节点或分支节点&#…...

【战略前沿】与中国达成生产协议后,飞行汽车即将起飞

【原文】Flying cars edge towards takeoff after Chinese production deal 【作者】Thomas Macaulay 斯洛伐克公司KleinVision签署了一项协议&#xff0c;将大规模生产AirCar。 一辆获得航空认证的飞行汽车向商业化又迈出了一大步。 空中汽车的创造者KleinVision今天宣布出售…...

谷粒商城实战(007 压力测试)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第141p-第p150的内容 简介 安装jmeter 安装jmeter 使用中文 这样写就是200个线程循环100次 一共是2万个请求 介绍线程组 添加请求 可以是htt…...

使用CSS计数器,在目录名称前加上了序号,让目录看起来更加井然有序

目录&#xff08;Text of Contents缩写为TOC&#xff09;&#xff0c;其实就是一篇文章的概要或简述。这好比&#xff0c;去书店买书&#xff0c;先是被这本书的标题所吸引&#xff0c;而后我们才会&#xff0c;翻开这本书目录&#xff0c;看看这本书主要是在讲些什么&#xff…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...

Oracle实用参考(13)——Oracle for Linux物理DG环境搭建(2)

13.2. Oracle for Linux物理DG环境搭建 Oracle 数据库的DataGuard技术方案,业界也称为DG,其在数据库高可用、容灾及负载分离等方面,都有着非常广泛的应用,对此,前面相关章节已做过较为详尽的讲解,此处不再赘述。 需要说明的是, DG方案又分为物理DG和逻辑DG,两者的搭建…...

CentOS 7.9安装Nginx1.24.0时报 checking for LuaJIT 2.x ... not found

Nginx1.24编译时&#xff0c;报LuaJIT2.x错误&#xff0c; configuring additional modules adding module in /www/server/nginx/src/ngx_devel_kit ngx_devel_kit was configured adding module in /www/server/nginx/src/lua_nginx_module checking for LuaJIT 2.x ... not…...

【向量库】Weaviate 搜索与索引技术:从基础概念到性能优化

文章目录 零、概述一、搜索技术分类1. 向量搜索&#xff1a;捕捉语义的智能检索2. 关键字搜索&#xff1a;精确匹配的传统方案3. 混合搜索&#xff1a;语义与精确的双重保障 二、向量检索技术分类1. HNSW索引&#xff1a;大规模数据的高效引擎2. Flat索引&#xff1a;小规模数据…...

【前端实战】如何让用户回到上次阅读的位置?

目录 【前端实战】如何让用户回到上次阅读的位置&#xff1f; 一、总体思路 1、核心目标 2、涉及到的技术 二、实现方案详解 1、基础方法&#xff1a;监听滚动&#xff0c;记录 scrollTop&#xff08;不推荐&#xff09; 2、Intersection Observer 插入探针元素 3、基…...

5. TypeScript 类型缩小

在 TypeScript 中&#xff0c;类型缩小&#xff08;Narrowing&#xff09;是指根据特定条件将变量的类型细化为更具体的过程。它帮助开发者编写更精确、更准确的代码&#xff0c;确保变量在运行时只以符合其类型的方式进行处理。 一、instanceof 缩小类型 TypeScript 中的 in…...

SAP学习笔记 - 开发24 - 前端Fiori开发 Filtering(过滤器),Sorting and Grouping(排序和分组)

上一章讲了SAP Fiori开发的表达式绑定&#xff0c;自定义格式化等内容。 SAP学习笔记 - 开发23 - 前端Fiori开发 Expression Binding&#xff08;表达式绑定&#xff09;&#xff0c;Custom Formatters&#xff08;自定义格式化&#xff09;-CSDN博客 本章继续讲SAP Fiori开发…...