C++并发之协程实例(四)(通过迭代器访问生成器序列)

目录

  • 1 协程
  • 2 实例
  • 3 运行

1 协程

  协程(Coroutines)是一个可以挂起执行以便稍后恢复的函数。协程是无堆栈的:它们通过返回到调用方来暂停执行,并且恢复执行所需的数据与堆栈分开存储。这允许异步执行的顺序代码(例如,在没有显式回调的情况下处理非阻塞I/O),还支持惰性计算无限序列上的算法和其他用途。
协程类图如下:
协程类

2 实例

#include <coroutine>
#include <iostream>
#include <optional>template<std::movable T>
class Generator
{
public:struct promise_type{Generator<T> get_return_object(){return Generator{Handle::from_promise(*this)};}static std::suspend_always initial_suspend() noexcept{return {};}static std::suspend_always final_suspend() noexcept{return {};}std::suspend_always yield_value(T value) noexcept{current_value = std::move(value);return {};}// Disallow co_await in generator coroutines.// 不允许在生成器协同程序中使用co_await。void await_transform() = delete;[[noreturn]]static void unhandled_exception() { throw; }std::optional<T> current_value;};using Handle = std::coroutine_handle<promise_type>;explicit Generator(const Handle coroutine) :m_coroutine{coroutine}{}Generator() = default;~Generator(){if (m_coroutine)m_coroutine.destroy();}Generator(const Generator&) = delete;Generator& operator=(const Generator&) = delete;Generator(Generator&& other) noexcept :m_coroutine{other.m_coroutine}{other.m_coroutine = {};}Generator& operator=(Generator&& other) noexcept{if (this != &other){if (m_coroutine)m_coroutine.destroy();m_coroutine = other.m_coroutine;other.m_coroutine = {};}return *this;}// Range-based for loop support.class Iter{public:void operator++(){m_coroutine.resume();}const T& operator*() const{return *m_coroutine.promise().current_value;}bool operator==(std::default_sentinel_t) const{return !m_coroutine || m_coroutine.done();}explicit Iter(const Handle coroutine) :m_coroutine{coroutine}{}private:Handle m_coroutine;};Iter begin(){if (m_coroutine)m_coroutine.resume();return Iter{m_coroutine};}std::default_sentinel_t end() { return {}; }private:Handle m_coroutine;
};template<std::integral T>
Generator<T> range(T first, const T last)
{while (first < last)co_yield first++;
}int main()
{for (const char i : range(65, 91))std::cout << i << ' ';std::cout << '\n';
}

3 运行

运行结果:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

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

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

相关文章

零代码搭建AI应用-文心智能体的设计与实现

本教程旨在帮助你开发一个结合语音识别和信息查询技术的智能应用&#xff0c;为用户提供登山小技巧和心得体会&#xff0c;满足用户在户外运动中的需求。通过设计不同角色和场景&#xff0c;可以满足用户在不同生活领域的需求&#xff0c;例如在家庭、社交、职场等场景下提供不…

什么洗地机值得推荐?洗地机选购攻略,热门洗地机推荐

在家庭清洁领域&#xff0c;洗地机已成为越来越多家庭的首选设备。它不仅能轻松应对各种材质的地面&#xff0c;还能有效去除顽固污渍&#xff0c;使家居环境更加整洁。然而&#xff0c;面对市场上众多洗地机品牌&#xff0c;许多消费者都会产生“什么洗地机值得推荐”的疑问。…

算法常见手写代码

1.NMS def py_cpu_nms(dets, thresh):"""Pure Python NMS baseline."""#x1、y1、x2、y2、以及score赋值x1 dets[:, 0]y1 dets[:, 1]x2 dets[:, 2]y2 dets[:, 3]scores dets[:, 4]#每一个检测框的面积areas (x2 - x1 1) * (y2 - y1 1)#按…

2024年数据、自动化与智能计算国际学术会议(ICDAIC 2024)

全称&#xff1a;2024年数据、自动化与智能计算国际学术会议&#xff08;ICDAIC 2024&#xff09; 会议网址:http://www.icdaic.com 会议地点: 厦门 投稿邮箱&#xff1a;icdaicsub-conf.com投稿标题&#xff1a;ArticleTEL。投稿时请在邮件正文备注&#xff1a;学生投稿&#…

Linux安装minio及mc客户端(包含ARM处理器架构)

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

Ubuntu 18.04 安装低延时内核

下面记录在在Ubuntu 18.04系统下安装低延时内核的流程&#xff1a; Ubuntu 内核信息 ll /boot其中initrd.img为根文件系统&#xff0c;System.map为内核符号表&#xff08;将内核代码段中的地址映射到对应的函数名或者全局变量名&#xff09;&#xff0c;vmlinuz为内核镜像。…

论文翻译 | Active Retrieval Augmented Generation 主动检索增强生成

Zhengbao Jiang1∗ Frank F. Xu1∗ Luyu Gao1∗ Zhiqing Sun1∗ Qian Liu2 Jane Dwivedi-Yu3 Yiming Yang1 Jamie Callan1 Graham Neubig1 卡内基梅隆大学语言技术研究所&#xff1b;海洋人工智能研究室&#xff1b;FAIR, Meta EMNLP 2023 main &#xff08;Proceedings of t…

低成本创业新篇章:上门回收小程序的崛起与挑战

在当今这个快速变化的时代&#xff0c;低成本创业项目成为了许多创业者的首选。其中&#xff0c;上门回收小程序以其独特的商业模式和市场需求&#xff0c;成为了创业市场中的一股新势力。本文将深入探讨上门回收小程序作为低成本创业项目的崛起之路以及面临的挑战。 一、上门回…

【R语言】地理探测器模拟及分析(Geographical detector)

地理探测器模拟及分析 1. 写在前面2. R语言实现2.1 数据导入2.2 确定数据离散化的最优方法与最优分类2.3 分异及因子探测器&#xff08;factor detector&#xff09;2.4 生态探测器&#xff08;ecological detector&#xff09;2.5 交互因子探测器&#xff08;interaction dete…

HTML(14)——结构伪类选择器和伪元素选择器

结构伪类选择器 作用&#xff1a; 根据元素的结构关系查找元素 选择器说明E:first-child查找第一个E元素E:last-child查找最后一个E元素E:nth-child(N)查找第N个E元素(第一个元素N值为1) 例如&#xff1a;查找第一个li标签&#xff0c;将背景改为绿色 <style> li:fir…

超越招聘技术人才目标的最佳技术招聘统计数据

研究发现&#xff0c;难以找到的人才比以往任何时候都更难找到&#xff1a;根据新人才委员会招聘调查报告&#xff1a;2024年难以找到的人才的战略和战略&#xff0c;60%的受访者表示&#xff0c;熟练人才的招聘时间比一年前长。调查进一步揭示了以下关于招聘技术的关键事实&am…

Git 常用命令,一文全搞懂

注意&#xff1a;每一次切换分支的时候&#xff0c;本地代码都会自动跟随改变&#xff0c;不需要重新pull,除非有人更新了代码 git remote add origin 地址 连接远程仓库 git clone 地址 克隆项目到本地 git init 更新本地隐藏文件初始化仓库 git add . 代…

Java--Data类

1.Data类 java.util.Date.表示指定的时间信息&#xff0c;不支持国际化 构造方法 new Date()&#xff1a;当前系统日期和时间 new Date(long)&#xff1a;给定日期和时间 主要方法&#xff1a; after(Date):判断当前日期对象是否在给定日期对象之后 before(Date):判断当前日期…

基础购物车(Javascript)

使用Javascript写一个基础购物车&#xff0c;其中包含商品数量加加减减&#xff0c;下面的总价和总数量跟着商品数量变动&#xff0c;还可以自己添加需要的商品。 基础购物车的结构样式如下&#xff1a; HTML代码&#xff1a; <body><table border"1px" c…

LeetCode26. 删除有序数组中的重复项题解

LeetCode26. 删除有序数组中的重复项题解 题目链接&#xff1a; https://leetcode.cn/problems/remove-duplicates-from-sorted-array 题目描述&#xff1a; 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一…

JavaWeb——Mysql的启动/登录/卸载

目录 1.Mysql服务器 2.Mysql的简单使用 2.1 启动Mysql&#xff1a; 2.2 登录Mysql 2.3 退出 3. 连接别人的数据库 4.卸载mqsql 1.Mysql服务器 安装了Mysql的计算机都成为Mysql服务器 2.Mysql的简单使用 2.1 启动Mysql&#xff1a; 第一种方法&#xff1a;搜索服务&am…

一文读懂交换机MAC地址表:五大关键点,图解21步

HCIA 新班开课了华为HCIA课程介绍苏州面授班 | 全国直播班循环开班&#xff0c;免费重学前言 什么是MAC地址表?MAC地址表有什么作用&#xff1f;MAC地址表里面包含了哪些要素&#xff1f;今天带你好好唠唠。 我们以一个案例为例&#xff1a; 如上图&#xff1a;PC1和PC2通…

2024.6.24 IDEA中文乱码问题(服务器 控制台 TOMcat)实测已解决

1.问题产生原因&#xff1a; 1.文件编码不一致&#xff1a;如果文件的编码方式与IDEA设置的编码方式不一致&#xff0c;就会产生乱码。确保文件和IDEA使用相同的编码&#xff0c;通常是UTF-8。2.IDEA设置问题&#xff1a;检查IDEA的全局编码设置和项目编码设置是否正确。3.终端…

adb 查看哪些应用是双开的

adb shell pm list users 得到 这 里有 user 0 ,11,999 其中0是系统默认的&#xff0c;11是平行空间的&#xff0c;999是双开用户 pm list packages --user 999 -3 得到了999用户安装第三方应用的包名 pm list packages --user 11 -3 得到了隐私空间用户安装第三方应用的…

Windows环境如何ssh远程连接本地局域网内的Archcraft系统

文章目录 前言1. 本地SSH连接测试2. Archcraft安装Cpolar3. 配置 SSH公网地址4. 公网远程SSH连接小结 5. 固定SSH公网地址6. SSH固定地址连接 前言 本文主要介绍如何在Archcraft系统中安装Cpolar内网穿透工具,并以实现Windows环境ssh远程连接本地局域网Archcraft系统来说明使用…