网站续费申请莱芜杂谈 莱芜话题

web/2025/10/8 19:09:04/文章来源:
网站续费申请,莱芜杂谈 莱芜话题,装修注意事项及细节,梦幻西游网页版微信区和app互通吗文章目录 C111. 模版的可变参数1.1 模版参数包的使用 2. lambda表达式2.1 Lambda表达式语法捕获列表说明 2.2 lambda的底层 3. 包装器3.1 function包装器3.2 bind 4. 线程库4.1 thread类4.2 mutex类4.3 atomic类4.4 condition_variable类 C11 1. 模版的可变参数 C11支持模版的… 文章目录 C111. 模版的可变参数1.1 模版参数包的使用 2. lambda表达式2.1 Lambda表达式语法捕获列表说明 2.2 lambda的底层 3. 包装器3.1 function包装器3.2 bind 4. 线程库4.1 thread类4.2 mutex类4.3 atomic类4.4 condition_variable类 C11 1. 模版的可变参数 C11支持模版的可变参数可变模版参数比较抽象晦涩我们只探讨其中基础。 template class ...Args // 模版参数包 void ShowList(Args... args) // 函数参数包 {}...表明是可变模版参数称为参数包可以有 [ 0 , N ] [0,N] [0,N] 个模版参数。可变参数的模版函数同样是根据调用情况实例化出多份。 // 展示参数包个数 cout sizeof...(Args) endl; cout sizeof...(args) endl;1.1 模版参数包的使用 void showlist() {cout endl; }templateclass T, class... Args void show_list(const T val, Args... args) {cout val ; // 使用第一个参数showlist(args...); // 向下递归传递参数包 }int main() {showlist();showlist(1);showlist(1, 2);showlist(1, 2, string);return 0; }参数包可以递归解析。 首先无参调用可直接调用无参版本。其次有参调用的第一个参数会被val获取之后的参数会被参数包获取。使用完第一个参数后可以传参数包下去递归调用。 打印剩余的参数 void showlist() {cout endl; }templateclass T, class...Args void showlist (const T val, Args... args) {cout __FUNCTION__ -- sizeof...(args)endl;//cout val ;showlist(args...);//cout sizeof...(args) endl;//计算大小//如何解析出可变参数包呢//不能这么玩语法不支持//for (int i 0; i sizeof...(args); i)//{// cout args[i] ;//} }int main() {showlist(x, 1,2,string);return 0; }线程库就是使用可变模版参数支持传递任意个参数。  2. lambda表达式 2.1 Lambda表达式语法 [capture-list](parameters) mutable - return-type { statement }语法组成解释是否省略[capture_list]捕获列表捕捉当前作用域中的变量。分为传值捕捉和引用捕捉不可省略(param_list)参数列表形参默认具有const属性可加mutable去除常属性可省略- ret_type指明返回类型可省略自动推导{}函数体内容不可省略 各部分说明: capture-list: 捕捉列表该列表总是出现在lambda函数的开始位置编译器根据来。判断接下来的代码是否为lambda函数捕捉列表能够捕捉上下文中的变量供lambda函数使用。(parameters): 参数列表与普通函数的参数列表一致如果不需要参数传递则可以连同()一起省略。mutable: 默认情况下lambda函数总是一个const函数mutable可以取消其常量性。使用该修饰符时参数列表不可省略(即使参数为空)。- return-type: 返回值类型。用追踪返回类型形式声明函数的返回值类型没有返回0值时此部分可省略。返回值类型明确情况下也可省略由编译器对返回类型进行推导。{ statement }: 函数体。在该函数体内除了可以使用其参数外还可以使用所有捕获到的变量。 注意: 在lambda函数定义中参数列表和返回值类型都是可选部分而捕捉列表和函数体可以为空。因此C11中最简单的lambda函数为:0;该lambda函数不能做任何事情。 看个样例代码 int main() {// 最简单的lambda表达式, 该lambda表达式没有任何意义[]{}; // 省略参数列表和返回值类型返回值类型由编译器推导为intint a 3, b 4;[]{return a 3; }; // 省略了返回值类型无返回值类型auto fun1 [](int c){b a c; }; fun1(10);couta bendl;// 各部分都很完善的lambda函数auto fun2 [, b](int c)-int{return b a c; }; coutfun2(10)endl;// 复制捕捉xint x 10;auto add_x [x](int a) mutable { x * 2; return a x; }; cout add_x(10) endl; return 0; }通过上述例子可以看出lambda表达式实际上可以理解为无名函数该函数无法直接调 用如果想要直接调用可借助auto将其赋值给一个变量。 捕获列表说明 [captrue_list] 捕获列表用来捕捉当前作用域前和全局的变量。[]不可省略。 分为传值捕捉和引用捕捉引用捕捉[a, b]。[]表示全引用捕捉[]表示全传值捕捉。捕捉所有能捕捉的变量。[a, ]表示混合捕捉引用捕捉a变量其他变量传值捕捉。但不可重复捕捉。捕捉列表和参数列表的变量默认用const修饰可加mutable解除修饰。 auto func1 [a, b] () {}; // 传值捕捉 auto func2 [a, b] () {}; // 引用捕捉 auto func3 [] () {}; // 全传值捕捉 auto func4 [] () {}; // 全引用捕捉// 混合捕捉 [a, b, ](){}; // 引用捕捉a和b变量其他变量传值捕捉 [, a](){}; // 重复传值捕捉a编译报错注意 父作用域指包含lambda函数的语句块 语法上捕捉列表可由多个捕捉项组成并以逗号分割。 ​ 比如[, a, b]以引用传递的方式捕捉变量a和b值传递方式捕捉其他所有变量 [a, this]值传递方式捕捉变量a和this引用方式捕捉其他变量 //Lambda表达式捕捉列表的示例 auto lambda1 [, b]() {std::cout Inside lambda1: a a , b b std::endl;// 可以访问变量a的值但只能以值传递的方式访问而变量b可以以引用传递的方式访问 };捕捉列表不允许变量重复传递否则就会导致编译错误。 ​ 比如[, a]已经以值传递方式捕捉了所有变量捕捉a重复 //Lambda表达式捕捉列表中不允许变量重复传递的示例 /// 以下代码将导致编译错误因为变量a已经在捕捉列表中以值传递的方式捕捉了 // auto lambda2 [, a]() {}; // 编译错误重复的捕捉变量a // auto lambda3 [, ]() {}; //编译错误传值和引用不可以同时存在 在块作用域以外的lambda函数捕捉列表必须为空。 // 在块作用域以外的lambda函数捕捉列表必须为空的示例 int c 20; auto lambda3 []() { // 在此lambda函数中只能访问到变量a和b无法访问外部的变量cstd::cout Inside lambda3: a a , b b std::endl; };lambda表达式之间不能相互赋值即使看起来类型相同 // lambda表达式之间不能相互赋值的示例 // auto lambda4 lambda3; // 编译错误无法从lambda函数lambda3初始化lambda函数lambda42.2 lambda的底层 lambda表达式不能相互赋值即使看起来类型相同。 auto lamdba []() {}; cout sizeof(lamdba) endl; // 1 cout typeid(lamdba).name() endl; // class int __cdecl main(void)::2::lambda_1// class lambda_fcbffd5ae4b5ac20353abe92769a204flambda表达式最后会被编译器处理成仿函数所以lambda是个空类大小为1。类名不同编译器实现不同但能保证每个lambda表达式类名不同。 看看仿函数和lambda表达式的底层: 3. 包装器 包装器用来包装具有相同特征用途的多个可调用对象便于以统一的形式调用它们。 3.1 function包装器 function包装器也叫做适配器C中的function本质是一个类模版。定义如下 #include functionaltemplate class RetType, class... ArgsType /* 声明返回类型和参数类型 */class functionRet(Args...); // 普通函数 int func(int a, int b) { return a b; } // 仿函数 struct functor {int operator()(int x, int y) { return x y; } }; // 非静态成员函数 struct Plus {int plus(int a, int b) { return a b; } }; // 静态成员函数 struct Sub {static int sub(int a, int b) { return a - b; } };std::functionint(int, int) f1 f; std::functionint(int, int) f2 Functor(); std::functionint(Plus, int, int) f3 Plus::plus; std::functionint(int, int) f4 Sub::sub;封装成员函数时需要注意的点有指定类域、对象参数、加取地址符。 struct Plus {Plus(int i) {}int plus(int a, int b) { return a b; } };int main() {functionint(Plus, int, int) f1 Plus::plus;f1(Plus(1), 1, 2);functionint(Plus, int, int) f2 Plus::plus;Plus p(1);f2(p, 1, 2);functionint(Plus*, int, int) f3 Plus::plus;f3(p, 1, 2);functionint(Plus, int, int) f4 Plus::plus;f4(Plus(3), 1, 2);return 0; }3.2 bind bind函数也是一个函数包装器本质是一个函数模版。生成一个新的可调用对象来调整一个可调用对象的参数列表。 // without return template class Func, class... Argsbind(Func fn, Args... args);// with return type template class Ret, class Func, class... Args bind(Func fn, Args... args);class suber { public:suber(int rt) : _rt(rt){}int sub(int a, int b) { return (a - b) * _rt; } private:int _rt; };// 通过bind调整参数顺序 functionint(int, int) f1 bind(suber, placeholders::_1, placeholders::_2); functionint(int, int) f2 bind(suber, placeholders::_2, placeholders::_1); cout f1(2, 1) endl; cout f2(1, 2) endl;// 通过bind调整参数个数 functionint(suber, int, int) f3 Sub::sub; functionint(int, int) f4 bind(Sub::sub, Sub(3), placeholders::_1, placeholders::_2); cout f3(Sub(1), 2, 1) endl; cout f4(2, 1) endl;4. 线程库 C11提供了跨平台的具有面向对象特性的线程库线程相关的系统知识在此不作赘述直接讨论线程库的使用。 4.1 thread类 构造函数解释thread() noexcept创建thread对象不执行任何操作thread(Fn fn, Args... args)传入调用对象和参数列表thread(const thread) delete线程对象不可拷贝thread(thread th)线程对象支持移动成员函数解释void join()等待线程void detach()分离线程 关于当前线程的一些操作被放到this_thread类中 this_thread 成员函数解释thread::id get_id () noexcept返回线程IDvoid sleep_for (const chrono::durationRep,Period rel_time)设置休眠时间 vectorthread thds(N); // 线程池 atomicint x 0;for (auto td : thds) {td thread([x, M](int i 0) { while (i M) {cout this_thread::get_id() - x endl; // get_id()this_thread::sleep_for(std::chrono::seconds(1)); // sleep_for()x;}}); }for (auto td : thds) {td.join(); }4.2 mutex类 mutex类封装系统中的互斥锁具体接口如下 mutex解释mutex() noexcept创建互斥锁mutex (const mutex) delete禁止拷贝锁void lock()加锁void unlock()解锁lock_guard解释explicit lock_guard (mutex_type m)构造函数lock_guard (const lock_guard) delete不支持拷贝unique_lock解释explicit unique_lock (mutex_type m)构造函数unique_lock (const unique_lock) delete不支持拷贝void lock()加锁void unlock()解锁 捕获异常并解锁释放资源是不够友好的因此异常时资源的处理交给RAII解决。RAII即资源获取就是初始化是一种管理资源的用法。 本质是将资源封装成类自动调用构造和析构。以达到资源获取自动初始化出作用域自动释放的效果。 利用 RAII 封装的成“智能锁”我们称之为锁守卫lock_guard。 4.3 atomic类 保证自增减的原子性可以使用原子操作。atomic类封装系统原子操作具体接口如下 template class T struct atomic;T fetch_add (T val, memory_order sync memory_order_seq_cst) volatile noexcept; // T fetch_sub (T val, memory_order sync memory_order_seq_cst) volatile noexcept; // - T fetch_and (T val, memory_order sync memory_order_seq_cst) volatile noexcept; // T fetch_or (T val, memory_order sync memory_order_seq_cst) volatile noexcept; // | T fetch_xor (T val, memory_order sync memory_order_seq_cst) volatile noexcept; // ^ T operator() volatile noexcept; // T operator--() volatile noexcept; // --无锁算法CAS Linux原子操作系统调用 4.4 condition_variable类 条件变量是线程同步的一种机制主要包括两个动作等待条件变量挂起条件变量成立运行。 condition_variable解释condition_variable()构造条件变量condition_variable (const condition_variable) delete禁止拷贝条件变量void wait (unique_lockmutex lck)直接等待void wait (unique_lockmutex lck, Predicate pred)指定条件下等待void notify_one() noexcept唤醒单个线程void notify_all() noexcept唤醒多个线程 // wait的实现 template class Predicate void wait (unique_lockmutex lck, Predicate pred) {while (!pred()) /* pred()为假进入等待 */wait(lck); }tex lck) | 直接等待 | |void wait (unique_lock lck, Predicate pred) | 指定条件下等待 | |void notify_one() noexcept | 唤醒单个线程 | |void notify_all() noexcept | 唤醒多个线程 | // wait的实现 template class Predicate void wait (unique_lockmutex lck, Predicate pred) {while (!pred()) /* pred()为假进入等待 */wait(lck); }模版参数pred是个可调用对象其返回值代表线程是否进入临界区的条件。条件为真停止等待条件为假进入等待。

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

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

相关文章

徐典超 网站建设云南seo

简介 上篇文章已经介绍了数据类型,如INTERGER TYPE、BITMASK TYPE、STRING TYPE、LINK LAYER ADDRESS TYPE、 IPV4 ADDRESS TYPE、 IPV6 ADDRESS TYPE、BOOLEAN TYPE、ICMP TYPE、CONNTRACK TYPES等。那么本篇文章主要介绍PRIMARY表达式的相关内容。 PRIMARY EXPR…

如何做一个网站推广自己的产品中华衣柜网

转载自 分布式架构--基本思想汇总 在互联网大行其道的今天,各种分布式系统已经司空见惯。搜索引擎、电商网站、微博、微信、O2O平台。。凡是涉及到大规模用户、高并发访问的,无一不是分布式。 关于分布式系统,并没有…

手机网站如何优化室内设计展厅设计

随着工作或学习,使用电脑的时间增长,里面的文件也会越来越多。有时候想找某个文件,可能就突然忘了把它放在哪了。如果能想起文件名,那么还可以用电脑自带的搜索或者everything这类的软件进行搜索。但如果连文件名都忘了呢&#xf…

网站建设需求分析文档海淀区企业网站建设

目录 一、题目 二、分析代码 一、题目 123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09; 二、分析代码 class Solution { public:int maxProfit(vector<int>& prices) {//0表示没有操作//1表示第1次买入&#xff0c;2表示第1次卖出//3表示第2…

深圳证券网站开发城市网站建设分析报告

Jaccard 相似系数又称为Jaccard相似性度量&#xff08;Jaccard系数&#xff0c;Jaccard 指数&#xff0c;Jaccard index&#xff09;。用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大&#xff0c;样本相似度越高。定义为相交的大小除以样本集合的大小&#xff1a;…

渔具网站建设策划书前言个人网站架设

【JVM】垃圾回收机制 文章目录 【JVM】垃圾回收机制1. 方法区的回收2. 堆的回收2.1 引用计数法2.2 可达性分析算法 3. 对象引用3.1 强引用3.2 软引用3.3 弱引用3.4 虚引用和终结器引用 4. 垃圾回收算法4.1 标记清除算法4.2 复制算法4.3 标记整理算法4.4 分代垃圾回收算法 5. 垃…

网站建设硬件安徽省网站建设公司

文章目录 条件利用SQL注入漏洞读取hosts文件查看文件读写权限安全选项允许导入导出读取hosts文件 利用SQL注入漏洞写入一句话木马&#xff0c;并用蚁剑连接webshell写入文件 条件 SQL注入有直接SQL注入&#xff0c;也有文件读写时的注入&#xff0c;后者的主要 目的在于获取web…

cnzz如何查询某个网站频道的流量海淀网站设计

文章目录 文章目录 00 写在前面01 基于Pytorch版本的E3D LSTM代码02 论文下载 00 写在前面 测试代码&#xff0c;比较重要&#xff0c;它可以大概判断tensor维度在网络传播过程中&#xff0c;各个维度的变化情况&#xff0c;方便改成适合自己的数据集。 需要github上的数据集…

几十元做网站郑州百度分公司

题目&#xff1a;两个乒乓球队进行比赛&#xff0c;各出三人。甲队为a,b,c三人&#xff0c;乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比&#xff0c;c说他不和x,z比&#xff0c;请编程序找出三队赛手的名单。 首先吐槽一下&#xff0c;这是…

网站建设中目录网站开发客户阿里云案例

gpt: 要开发 Edge 浏览器插件&#xff0c;你可以使用基于 Web 技术的扩展框架。Edge 使用的扩展框架与 Chrome 的扩展框架非常类似&#xff0c;因为它们都基于 Chromium 内核。下面是一个简单的 Edge 浏览器插件示例&#xff0c;演示如何创建一个基本的插件&#xff0c;该插件…

公司想做个网站德州口碑好的网站制作公司

首先需要说明的是&#xff0c;基于IIS v6.0/v7.0(2008)&#xff0c;可以支持的脚本相当完整&#xff0c;不仅支持Linux无法支持的asp/asp.net&#xff0c;还可以安装php、mysql、zend实现php环境。同时&#xff0c;利用Serv-U可以实现ftp管理。操作简单&#xff0c;无需键入任何…

收费搭建网站郑州新闻联播

1999-2022年各省研究与试验发展人员全时当量数据/省研发人员全时当量数据/(R&D)人员全时当量&#xff08;无缺失&#xff09; 1、时间&#xff1a;1999-2022年 2、来源&#xff1a;科技年鉴 3、指标&#xff1a;研究与试验发展人员全时当量/研发人员全时当量 4、范围&a…

网站用ai做还是ps设计制作小车教学设计

要让一个批处理文件&#xff08;.bat&#xff09;在每次开关机时自动运行&#xff0c;可以将它添加到系统的启动项中。这样&#xff0c;每次计算机启动时&#xff0c;批处理文件就会自动运行&#xff0c;无需手动打开。 以下是在 Windows 操作系统中将批处理文件添加到启动项的…

电子商务网站建设与维护实验报告虚拟资源下载主题wordpress

随着科技的发展和能源管理的日益精细化&#xff0c;电能量数据采集终端——电表采集器在保障电力系统稳定运行、实现节能减排等方面发挥着越来越重要的作用。下面&#xff0c;小编来为大家全面介绍电表采集器的功能、应用场景及其在我国能源领域的价值。 一、电表采集器的定义与…

成品网站怎么新建网页猎头用什么网站做单

目录 1&#xff0c;抽象类1&#xff0c;为什么需要抽象类2&#xff0c;抽象成员3&#xff0c;设计模式-模板模式 2&#xff0c;静态成员1&#xff0c;什么是静态成员2&#xff0c;设计模式-单例模式 1&#xff0c;抽象类 1&#xff0c;为什么需要抽象类 有时&#xff0c;某个…

广州设计网站培训班做海外网站 服务器放哪

许多现代的Web应用程序正朝着使用HTTP使用无状态通信的方向发展。 REST&#xff08;代表性状态转移&#xff09;体系结构样式通常用于设计网络应用程序&#xff0c;而使用Java EE 7&#xff0c;很容易开发用于数据库通信的RESTful后端。 使用简单的POJO&#xff08;普通的Java旧…

网站集约化建设通知wordpress开头

本文以气象台站数据的生成为例,详细介绍ArcGIS Earth中导入X、Y经纬度坐标,生成Shapefile点数据的流程。 文章目录 一、气象台站分布二、添加经纬度坐标三、符号化设置四、另存为一、气象台站分布 根据气象台站的经纬度坐标,可以很方便的在各种GIS平台上生成点,并保存为多…

想建立一个网站怎么做南宁建设职业技术学院招聘信息网站

01前言全局变量简直就是嵌入式系统的戈兰高地。冲突最激烈的双方是&#xff1a;1. 做控制的工程师&#xff1b;2. 做非嵌入式的软件工程师。02做控制的工程师特点他们普遍的理解就是“变量都写成全局该有多方便”。我之前面试过一个非常有名的做控制实验室里出来的PhD/Master&a…

为歌手做的个人网站京东怎么做不同网站同步登陆的

点击 <C 语言编程核心突破> 快速C语言入门 Qt学习总结 前言二十五 QFile文件操作总结 前言 要解决问题: 学习qt最核心知识, 多一个都不学. 二十五 QFile文件操作 QFile是Qt提供的文件读写类&#xff0c;支持对文件进行读写、复制、重命名、删除等操作。常用C函数如下&…

站中站网站案例设计网站的制作框架

11. 简述对NSUserDefaults的理解?NSUserDefaults,官网上的定义是一个用户默认数据库的接口,在应用程序的启动过程中,持久地存储键值对。每个应用都有一个(也只有一个)NSUserDefaults对象。向NSUserDefaults类发送standardUserDefaults消息可以得到该对象。使用时需要通过键…