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

【C++11(中)】—— 我与C++的不解之缘(三十一)

一、可变参数模版

基本语法:

C++11支持可变参数模版,简单来说就是支持可变数量参数的函数模版或者类模版;

可变数目的参数被称为参数包,存在两种参数包:模版参数包(表示0个或者多个模版参数),函数参数包(表示0个或者多个函数参数)。

template<class ...Args>
void func(Args ...args)
{}
template<class ...Args>
void func(Args& ...args)
{}
template<class ...Args>
void func(Args&& ...args)
{}

在这里插入图片描述

  • 我们使用...来指出一个模版参数或者函数参数,表示一个参数包;
  • 在模版参数列表在,class...或者typename...指出接下来的参数表示0个或者多个类型列表;
  • 在函数参数列表中,类型名后跟...指出接下来表示0个或者多个形参对象列表;
  • 函数参数包可以使用左值引用右指引用表示,每一个参数实例化时依然遵循引用折叠的规则。

这里我们可以使用sizeof...()来计算参数包里面有多少个参数。

template<class ...Args>
void func(Args ...args)
{cout << sizeof...(args) << endl;
}
int main()
{func();//0个参数func(1);//1个参数func(1, "love");//2个参数func(1, "love", 1.1);//3个参数return 0;
}

在这里插入图片描述

原理:

这里可变模版参数的原理和模版类似,本质上还是编译器去实例化对应类型和个数的多个函数。

就以上述代码来说,编译器实际上是根据我们传参的类型实例化出来了多个函数:

void func();
void func(int&& a);
void func(int&& a, string&& b);
void func(int&& a, string&& b, double c);

这里我们如果实现下列普通函数模版,也能到达目的:

void func();
template <class T1>
void func(T1&& a);
template <class T1, class T2>
void func(T1&& a, T2&& b);
template <class T1, class T2, class T3>
void func(T1&& a, T2&& b, T3&& c);

但是这样未必有些太麻烦了,如果我们还要传递4、5、6个甚至更多参数的,那还要一个个去实现。

而有了可变参数模板,我们只需要实现一个,就可以达到普通函数模板多个的效果。

**理解:**这里我们可以简单的理解成,可变参数函数模板先实例化出多个普通函数模板,在这进一步实例化出具体类型的函数。

当然编译器并不会这样去做,而是直接实例化出参数类型个个数对应的函数。

包扩展:

  • 对于一个参数包,我们能够使用sizeof...()去计算它的个数,除此之外,唯一能做的就是扩展它了。

那如何扩展呢?

  1. 当扩展一个参数包时,我们还需要提供一个用来扩展每一个元素的模式(扩展包简单来说就是将包中元素一个个取出来),这里对每一个元素应用模式,获得扩展之后的列表。
  2. 通过在模版的右边放一个...来触发扩展操作。
void ShowList()
{//编译器递归推导,当参数包中参数个数为0时匹配cout << endl;
}
template <class T, class ...Args>
void ShowList(T x, Args... args)
{cout << x << " ";//args参数包中参数的个数为N//调用ShowList,参数包的第一个参数传给x,剩下的N-1个参数传给第二个参数包ShowList(args...);
}template<class ...Args>
void func(Args ...args)
{ShowList(args);
}
int main()
{func();//0个参数func(1);//1个参数func(1, "love");//2个参数func(1, "love", 1.1);//3个参数return 0;
}

在这里插入图片描述

这里,也可以这样去扩展包

template <class T>
const T& GetArg(const T& x)
{cout << x << " ";return x;
}
template <class ...Args>
void Arguments(Args... args)
{}
template <class ...Args>
void func(Args... args)
{// 注意GetArg必须返回获得到的对象,这样才能组成参数包给ArgumentsArguments(GetArg(args)...);
}

这里本质上,编译器将上述模版函数扩展实例化为下面这样

void func(int x, string y, double z)
{Arguments(GetArg(x), GetArg(y), GetArg(z));
}

包扩展这里简单了解一下就OK了好吧(很少去自己实现或者使用包扩展)

在更多的情况下,是直接将包向下传递,直接匹配参数列表。

二、emplace系列

template <class... Args>void emplace_back (Args&&... args);
template <class... Args>iterator emplace (const_iterator position,Args&&... args);

C++11之后,STL容器新增了emplace系列的接口,emplace系列的接口都是可变参数模版,功能上和pushinsert一样;

但是emplace也支持一些新的东西,就比如对于容器container<T>emplace还支持直接插入构造T对象的参数,一些情况下会更加高效(在容器中直接构造T类型对象,而不是构造临时对象再进行拷贝构造/移动构造

int main()
{list<HL::string> lt1;HL::string s1("111111111111");cout << "------------------------------------" << endl;//左值,调用拷贝构造lt1.push_back(s1);cout << "------------------------------------" << endl;//右值,调用移动构造lt1.push_back(move(s1));cout << "------------------------------------" << endl;//push_back(),先创建临时对象,再调用移动构造lt1.push_back("111111111111");cout << "------------------------------------" << endl << endl;list<HL::string> lt2;HL::string s2("111111111111");cout << "------------------------------------" << endl;//左值,调用拷贝构造lt2.emplace_back(s2);cout << "------------------------------------" << endl;//右值,调用移动构造lt2.emplace_back(move(s2));cout << "------------------------------------" << endl;//emplace_back(),直接构造lt2.emplace_back("111111111111");cout << "------------------------------------" << endl << endl;return 0;
}

在这里插入图片描述

这里可以看到,push_back()是先构造了临时对象,再进行移动构造;

emplace_back()则是直接调用了构造函数。

这里push_back()是普通函数,在类模版实例化是时候,参数类型就已经确定了,上述代码中是string;而我们能够使用"111111111111"作为参数的原因就是:单参数的构造函数支持隐式类型转换。

emplace_back()是可变参数函数模版,在类模版实例化时它不会被实例化,所以emplace_back(111111111111"),它接受的参数类型是const char*,它就会将参数列表继续向下传递,直到参数类型是const char*的构造函数。

这里使用上篇文章中自己实现的string类(可以去看一下上篇文章的string类,其中构造函数参数是const char*(输出了strinf(char* str)-构造)。

在这里插入图片描述

这里了解了emplace,现在我们来对之前实现过的list,增加上emplace_back()emplace()接口

这里就只展示新增的代码了,详细请见:【list的模拟实现】—— 我与C++的模拟实现(十四)

ListNode

		template <class... Args>ListNode(Args&&... args): _next(nullptr), _prev(nullptr), _data(std::forward<Args>(args)...){}

list

		template <class... Args>void emplace_back(Args&&... args){emplace(end(), std::forward<Args>(args)...);}template <class... Args>iterator emplace(iterator pos, Args&&... args){Node* cur = pos._node;Node* newnode = new Node(std::forward<Args>(args)...);Node* prev = cur->_prev;// prev newnode curprev->_next = newnode;newnode->_prev = prev;newnode->_next = cur;cur->_prev = newnode;return iterator(newnode);}

这样我们在调用emplace_back()时,它会将参数包继续向下传到emplace,而emplace进行构造节点时,将参数包传递给了ListNode的构造函数。

这里要注意,为了保证参数包中参数的右值属性,我们要使用完美转发

除此之外呢,可变参数函数模版emplace还可以这样来使用:

int main()
{list<pair<HL::string, int>> lt1;pair<HL::string, int> kv("苹果", 1);//和push_back()一样,对于左值需要进行深拷贝,拷贝到节点中lt1.emplace_back(kv);cout << "------------------------------------------------" << endl;//对于右值就是移动构造lt1.emplace_back(move(kv));cout << "------------------------------------------------" << endl;//push_back进行插入pair类型对象时,必须使用{}括起来(先构造pair类型的临时对象)lt1.push_back({ "苹果", 1 });cout << "------------------------------------------------" << endl;//emplace_back进行插入pair对象时,不能使用{},因为它是可变参数函数模版,编译器不知道{"苹果",1}要构造成什么//emplace_back()将参数包继续往下传,直到pair类型构造(参数匹配了)lt1.emplace_back("苹果", 1);cout << "------------------------------------------------" << endl;return 0;
}

在这里插入图片描述

三、新的类功能

C++11有了左值右值等等这些概念以后,类有有了一些新的内容

默认的移动构造和移动赋值

在原来的C++类中,一共有6个默认成员函数:构造函数/析构函数/拷贝构造函数/拷贝赋值重载/取地址重载/const取地址重载;默认成员函数就是我们不写,编译器会生成一个默认的。C++11中新增了两个默认成员函数:移动构造函数和移动赋值重载

  • 如果我们没有自己实现 移动构造函数,且没有实现析构函数拷贝构造拷贝赋值重载中任意一个;此时编译器会生成一个默认移动构造。(默认生成的移动构造,对于内置类型会指向逐成员按字节拷贝;对于自定义类型成员,如果该成员实现了移动构造就调用带成员的移动构造,否则就调用拷贝构造。
  • 如果我们没有自己实现 移动赋值重载函数, 且没有实现析构函数拷贝构造拷贝赋值重载这任意一个,编译器就会生成一个默认移动赋值重载函数。(对于内置类型成员,完成逐字节拷贝;对于自定义类型成员,如果该成员实现了移动赋值重载,就调用移动赋值重载,否则调用拷贝赋值。
  • 如果自己实现了移动构造和移动赋值,编译器就不会生成拷贝构造和拷贝赋值了。

成员声明是给缺省值

成员变量声明时给缺省值,这个缺省值是给初始化列表使用的;

如果没有显示的在初始化列表进行初始化,就会使用这个缺省值去初始化成员变量。

defultdelete

  • C++11设定了defult,让我们更好的控制要使用的默认函数;加入我们要使用某一个编译器生成的默认函数,但是因为我们实现了其他的导致编译器没有生成(我们实现了拷贝构造,编译器就不会生成移动构造);我们可以使用defult关键字来指定要编译器生成。string(string&& str) = defult;(以string为例)。
  • 那如果我们不想要编译器默认生成某一个默认成员函数,在之前,我们可以只声明不定义并设置成私有成员private,这时就不能调用;在C++11中,我们只需要在函数声明后面加上=delete,这样就可以指明让编译器不生成某个默认成员函数。(这里也称=delete修饰的函数为删除函数

finaloverride

final的作用就是禁止类被继承禁止虚函数的重写

override的作用就是:用于显示地标注一个虚函数是对基类虚函数的重写(override)

这里不过多描述了,更多详细内容可以见【继承】—— 我与C++的不解之缘(十九)和【多态】—— 我与C++的不解之缘(二十)

STL中容器的一些变化

C++11有了这些新语法以后,STL有更新了一些新的内容:

  • 首先就是每一个容器的emplacepush/insert系列的右值引用版本、移动构造和移动赋值initializer_list这些
  • 其次就是hash版本的unordered_setunordered_map
  • 范围for语法

这些内容我们多多少少都已经了解了,这里就不过多叙述了。

STL还新增了一个容器array

在这里插入图片描述

这个array简单来说就是对数组的封装,这里简单了解一下就OK了。

感谢各位的支持!!!

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2oul0hvapjsws

相关文章:

【C++11(中)】—— 我与C++的不解之缘(三十一)

一、可变参数模版 基本语法&#xff1a; C11支持可变参数模版&#xff0c;简单来说就是支持可变数量参数的函数模版或者类模版&#xff1b; 可变数目的参数被称为参数包&#xff0c;存在两种参数包&#xff1a;模版参数包(表示0个或者多个模版参数)&#xff0c;函数参数包(表示…...

JavaScript学习19-事件类型之鼠标事件

1. 2. 3....

文件或目录损坏且无法读取:数据恢复的实战指南

在数字化时代&#xff0c;数据的重要性不言而喻。然而&#xff0c;在日常使用电脑、移动硬盘、U盘等存储设备时&#xff0c;我们难免会遇到“文件或目录损坏且无法读取”的提示。这一提示如同晴天霹雳&#xff0c;让无数用户心急如焚&#xff0c;尤其是当这些文件中存储着重要的…...

python爬虫:小程序逆向实战教程

根据我之前发表的文章&#xff0c;我们进行延伸实战https://blog.csdn.net/weixin_64809364/article/details/146981598?spm1001.2014.3001.5501 1. 想要爬取什么小程序&#xff0c;我们进行搜索 2. 找到我们vx小程序的文件地址&#xff0c;我们就可以进行破解 破解步骤强看…...

第二十节课:python实例五:身体质量指数BMI计算

python实例五&#xff1a;身体质量指数BMI计算 一、问题分析 BMI计算公式&#xff1a; BMI 体重(kg) / 身高(m)^2国际与国内标准对比 分类国际标准国内标准偏瘦<18.5<18.5正常18.5-2518.5-24偏胖25-3024-28肥胖≥30≥28 二、实现要点 输入处理 # 同时接收身高体重…...

八、重学C++—动态多态(运行期)

上一章节&#xff1a; 七、重学C—静态多态&#xff08;编译期&#xff09;-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/146999362?spm1001.2014.3001.5502 本章节代码&#xff1a; cpp/dynamicPolymorphic.cpp CuiQingCheng/cppstudy - 码云 - 开源中…...

思维链 Chain-of-Thought(COT)

思维链 Chain-of-Thought&#xff08;COT&#xff09;&#xff1a;思维链的启蒙 3. 思维链 Chain-of-Thought&#xff08;COT&#xff09;存在问题&#xff1f;2. 思维链 Chain-of-Thought&#xff08;COT&#xff09;是思路是什么&#xff1f;1. 什么是 思维链 Chain-of-Thoug…...

React框架的Fiber架构

以下是关于 Fiber 架构 的系统梳理: 一、Fiber 架构的出现背景 React 15 及之前的问题 同步递归渲染:虚拟DOM的diff过程不可中断,导致主线程长时间阻塞。掉帧问题:复杂组件树渲染时,用户交互无法及时响应。无法实现增量渲染:无法拆分任务优先级,无法利用浏览器空闲时间。…...

PCI与PCIe接口的通信架构是主从模式吗?

PCI&#xff08;Peripheral Component Interconnect&#xff09;总线在通信架构上本质是主从模式&#xff0c;但其具体实现和角色分配在不同版本&#xff08;如传统PCI与PCI Express&#xff09;中存在差异。以下是详细分析&#xff1a; 传统PCI总线的主从模式 (1) 基本架构 主…...

【2011】【论文笔记】THz保护文化遗产——

前言 类型 太赫兹 + 文化保护 太赫兹 + 文化保护 太赫兹+文化保护 期刊 I E E E T R A N S A C T I O N S O N T E R A H E R...

状态机思想编程练习

状态机实现LED流水灯 本次实验&#xff0c;我们将利用状态机的思想来进行Verilog编程实现一个LED流水灯&#xff0c;并通过Modelsim来进行模拟仿真&#xff0c;再到DE2-115开发板上进行验证。 ​ 首先进行主要代码的编写。 module led (input sys_clk,input sys_…...

三部门新政力推智能家居 居然智家数智化转型迎利好东风

2025年3月&#xff0c;工业和信息化部、教育部、市场监管总局联合印发《轻工业数字化转型实施方案》&#xff0c;明确提出重点培育智能家居、智能穿戴、智能骑行、智慧养老等消费端场景&#xff0c;深化人工智能技术在家电、家具等领域的应用&#xff0c;推动产业链供应链智能化…...

CCF GESP C++编程 七级认证真题 2025年3月

C 七级 2025 年 03 月 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 B A B C B B B A D D A C B B D 一、单选题 第 1 题 下列哪个选项是C中的关键字&#xff1f; A. function B. class C. method D. object 第 2 题 下面代码输出的是&#xff08;&#xff09; int main()…...

【MySQL】navicat16 result字段识别不了

在mysql里面使用result字段 打印出来为空 之后换了个字段命名 使用outcome 成功能打印出来了。。 不知道是不是版本的问题...

【教学类-102-02】自制剪纸图案(留白边、沿线剪)02——Python+PS自动化添加虚线边框

背景需求: 01版本实现了对透明背景png图案边界线的扩展,黑线实线描边 【教学类-102-01】自制剪纸图案(留白边、沿线剪)01-CSDN博客文章浏览阅读974次,点赞15次,收藏7次。【教学类-102-01】自制剪纸图案(留白边、沿线剪)01https://blog.csdn.net/reasonsummer/article…...

CExercise_05_1函数_1.1素数(要对键盘录入的数据做参数校验)

题目&#xff1a; 编写函数实现以下功能&#xff1a; 键盘录入一个正整数&#xff0c;请判断它是否是一个素数&#xff0c;然后控制台输出对应的结果。要对键盘录入的数据做参数校验&#xff0c;素数是一个大于1的自然数&#xff0c;它仅能被1和自身整除。 关键点 分析&#xf…...

运算放大器(五)电压比较器

比较器在最常用的简单集成电路中排名第二&#xff0c;仅次于排名第一的运算放大器。 电压比较器是一种用来比较输入信号电压与参考电压大小&#xff0c;并将比较结果以高电平或低电平形式输出的一种信号处理电路&#xff0c;广泛应用于各种非正弦波的产生和变换电路中&#xf…...

蓝桥杯_PCF8591

目录 一 前言 二 引言 三 PCF8591介绍 &#xff08;1&#xff09;I2C通信 &#xff08;2&#xff09;原理图中的8591 四 代码层面 &#xff08;1&#xff09;根据题目所给的示范代码&#xff0c;实现ADC 1 为什么需要返回值&#xff0c;同时返回值是unsigned char&#x…...

Windows修改hosts文件让向日癸软件联网

Windows修改hosts文件让向日癸软件联网 前言一、查看向日葵软件使用的网址及IP1.清除dns记录2.打开向日葵软件并将dns记录导出txt 二、修改Windows服务器的hosts文件1.winx选择Windows PowerShell(管理员)2.在Windows PowerShell中输入如下内容&#xff1a;3.在hosts文件最后添…...

[MySQL初阶]MySQL数据类型

MySQL数据类型 1. 数据类型分类2. 数值类型2.1 tinyint类型2.2 bit类型2.3 float类型2.4 decimal类型3. 字符串类型3.1 char3.2 varchar3.3 日期和时间类型3.4 enum和set1. 数据类型分类 数据库中的类型决定了在存储位置中,占据的空间大小以及如何识别的问题。 2. 数值类型 2…...

JS用ES6和ES5分别实现:8字节长整数和字节数组的互转

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

【学Rust写CAD】29 Alpha256结构体(alpha256.rs)

源码 #[derive(Clone, Copy)] pub struct Alpha256(u32);impl Alpha256{#[inline]pub fn from(alpha:u32)->Alpha256{Alpha256(alpha1)}// Calculates 256 - (value * alpha256) / 255 in range [0,256],// for [0,255] value and [0,256] alpha256.#[inline]fn alpha_mul_…...

Titanic - Machine Learning from Disaster

数据集 通过网盘分享的文件&#xff1a; 链接: https://pan.baidu.com/s/17TLeF8PW2GSWTbAIJC69-A?pwd4dak 提取码: 4dak 准备工作 # 导入必要的库 import numpy as np # 用于数值计算&#xff08;如矩阵运算、数学函数等&#xff09; import pandas as pd # 用于数据…...

GoFrame框架中Prometheus Metric组件监控的优势与实践

文章摘要 GoFrame 是一款轻量、高效且模块化的 Go 语言全能型框架&#xff0c;在 Go 生态中以其企业级应用能力和简洁设计受到开发者青睐。随着微服务架构的普及&#xff0c;性能监控成为开发中不可或缺的一环&#xff0c;而 Prometheus 凭借其强大的时间序列数据处理能力和灵…...

SQL语言的物联网

以SQL语言的物联网 引言 物联网&#xff08;IoT&#xff0c;Internet of Things&#xff09;作为一个新兴的技术领域&#xff0c;正迅速改变着我们的生活方式和工作模式。它通过将各种物体连接到互联网&#xff0c;实现了设备之间的智能通信与数据交换。随着物联网的普及&…...

戴尔笔记本 ubuntu 22.04 开机后进入initramfs界面

问题 在 Ubuntu 22.04 启动时进入 initramfs 界面&#xff0c;并提示 Gave up waiting for root device. Common problems: - Boot args (cat /proc/cmdline)- Check rootdelay (did the system wait long enough?) - Missing modules (cat /proc/modules; ls /dev) ALERT! …...

JavaScript BOM、事件循环

目录 BOM&#xff08;浏览器对象模型&#xff09; 一、window 对象 1. 窗口控制 2. 定时器 二、location 对象 三、navigator 对象 四、history 对象 五、screen 对象 六、本地存储 1. localStorage 2. sessionStorage 七、BOM 应用场景 八、总结 JavaScript 执行…...

归并排序算啊模板and三道困难级别的归并力扣算法题--LCR170,493,315

目录 归并排序算法模板&#xff1a; 1.1题目链接&#xff1a;LCR.170.交易逆序对的总数 1.2题目描述&#xff1a; 1.3解法(利用归并排序的过程--分治)&#xff1a; 2.1题目链接&#xff1a;315.计算右侧小于当前元素的个数 2.2题目描述&#xff1a; 2.3解法&#xff1a; …...

鸿蒙 harmonyOS:项目实战 :倒计时器

代码&#xff1a; import { promptAction } from kit.ArkUIEntry Component struct Index {State count: number 10 // 初始倒计时秒数State timerId: number -1 // 定时器ID// 开始倒计时startCountdown() {if (this.timerId -1) {this.timerId setInterval(() > {if …...

31--当认证协议开始“选秀“:RADIUS、LDAP、AD与本地认证的C位之争

当认证协议开始"选秀"&#xff1a;RADIUS、LDAP、AD与本地认证的C位之争 引言&#xff1a;认证界的"四大天王" 如果把企业网络比作夜店&#xff0c;那么身份认证就是门口的黑衣保安。不同风格的保安队长各有绝活&#xff1a; RADIUS像特种兵出身的安检专家…...

AI 数理逻辑基础之统计学基本原理(上)

目录 文章目录 目录统计学统计学基本概念描述性统计数据可视化图表工具 汇总统计统计数据的分布情况&#xff1a;中位数、众数、平均值统计数据的离散程度&#xff1a;极差、方差、标准差、离散系数 相关分析Pearson 线性关系相关系数Spearman 单调关系相关系数 回归分析回归模…...

C++容器数据类型定义、测试用例

C11 标准库提供了多种容器类型&#xff0c;每种容器定义了多个成员类型&#xff08;如 value_type、iterator 等&#xff09;&#xff0c;用于与容器交互。以下详细说明各容器的数据类型定义、测试用例及注意事项。 一、顺序容器 1. std::vector<T> 类型定义&#xff1…...

bun 版本管理工具 bum 安装与使用

在使用 node 的过程中&#xff0c;我们可能会因为版本更新或者不同项目的要求而频繁切换 node 版本&#xff0c;或者是希望使用更简单的方式安装不同版本的 node&#xff0c;这个时候我们一般会用到 nvm 或者类似的工具。 在我尝试使用 bun 的时候&#xff0c;安装前第一个想到…...

AI——使用numpy

文章目录 一、numpy的介绍1、ndarray介绍2、ndarray使用1、ndarray的属性2、ndarray生成数组的方法 3、修改数组的形状4、修改数组的类型5、数组去重 二、数组的运算1、逻辑运算2、通用判断函数3、三元运算符4、统计运算 三、数组间运算四、数学&#xff1a;矩阵 一、numpy的介…...

在线追思:一个虚拟扫墓平台,让思念不受时空限制

在线追思&#xff1a;一个虚拟扫墓平台&#xff0c;让思念不受时空限制 &#x1f4e2; 重要分享 今天想与大家分享一个特别的网站——在线追思平台。这是一个让我们能随时随地表达对逝者思念之情的虚拟扫墓平台。 &#x1f31f; 为什么需要在线追思&#xff1f; 在现代生活的…...

Visual Basic语言的网络协议栈

Visual Basic语言的网络协议栈 引言 在当今信息技术高速发展的时代&#xff0c;网络通信已经成为各类应用程序中不可或缺的部分。无论是网页浏览、文件传输&#xff0c;还是即时通讯&#xff0c;网络协议的有效实现都是保证数据顺利传输和信息安全的重要基础。在这种背景下&a…...

python速通小笔记-------4.Pandas库

1.pandas介绍 1.一维数组的创建 1.字典创建法-----------pd.Series(字典&#xff09; 使用pd.Series(),参数为已经创建好了的字典 2.数组创建法-----------pd.Series(列表1&#xff0c;index列表2&#xff09; 2.一维对象的属性 sr.values----------查看所有的vsr.index----…...

P7453 [THUSC 2017] 大魔法师 Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​)&#xff0c; b ( b 1 , b 2 , ⋯ , b n ) b(b_1,b_2,\cdots,b_n) b(b1​,b2​,⋯,bn​) 和 c ( c 1 , c 2 , ⋯ , c n ) c(c_1,c_2,\cdots,c_n) c(c1​,c2​,⋯,cn​)&…...

小程序API —— 58 自定义组件 - 创建 - 注册 - 使用组件

目录 1. 基本介绍2. 全局组件3. 页面组件 1. 基本介绍 小程序目前已经支持组件化开发&#xff0c;可以将页面中的功能模块抽取成自定义组件&#xff0c;以便在不同的页面中重复使用&#xff1b;也可以将复杂的页面拆分成多个低耦合的模块&#xff0c;有助于代码维护&#xff1…...

#Liunx内存管理# 在32bit Linux内核中,用户空间和内核空间的比例通常是3:1,可以修改成2:2吗?

在32位Linux内核中&#xff0c;用户空间和内核空间的3:1默认比例可以修改为2:2&#xff0c;但需要权衡实际需求和潜在影响。以下是具体分析&#xff1a; 一、修改可行性 1.技术实现 通过内核启动参数调整虚拟地址空间划分&#xff0c;例如在GRUB配置中添加mem2G参数&#xff0c…...

经济统计常见的同比与环比是啥意思?同比和环比有什么区别?

在经济统计领域&#xff0c;其实大家都会经常性看到同比还有环比&#xff0c;可人们对此就会觉得有些疑惑。到底是什么意思&#xff1f;这两者之间又有什么样的区别呢&#xff1f;下面就为大家来详细的介绍一下。 同比与环比是用于衡量数据变化趋势的关键指标&#xff0c;可以给…...

前端知识点---本地存储(javascript)

localStorage 是浏览器提供的一个 本地存储 API&#xff0c;可以在用户的浏览器中存储数据&#xff0c;数据不会随页面刷新而丢失。 1. 基本用法 (1) 存储数据&#xff08;setItem&#xff09; localStorage.setItem("username", "zhangsan");存储 “use…...

压测工具开发实战篇(二)——构建侧边栏以及设置图标字体

你好&#xff0c;我是安然无虞。 文章目录 构建侧边栏QtAwesome使用调整侧边栏宽度了解: sizePolicy属性伪状态 在阅读本文之前, 有需要的老铁可以先回顾一下上篇文章: 压测工具开发(一)——使用Qt Designer构建简单界面 构建侧边栏 我们要实现类似于下面这样的侧边栏功能: …...

【Java Stream详解】

文章目录 前言一、Stream概述1.1 什么是 Stream&#xff1f;1.2 Stream 和集合的区别 二、Stream的创建方式2.1 基于集合创建2.2 基于数组创建2.3 使用 Stream.generate()2.4 使用 Stream.iterate() 三、Stream常见操作3.1 中间操作&#xff08;Intermediate&#xff09;① fil…...

16进制在蓝牙传输中的应用

在蓝牙传输中&#xff0c;16进制&#xff08;Hexadecimal&#xff09;是一种常用的数据表示方法。它主要用于描述数据包的内容、地址、命令、参数等信息。以下是16进制在蓝牙传输中的具体应用场景和作用&#xff1a; 1. 数据包的表示 蓝牙通信中&#xff0c;所有数据最终都以二…...

TypeConverter

文章目录 基本描述主要功能接口源码主要实现最佳实践与其他组件的关系常见问题 基本描述 TypeConverter接口是Spring框架中用于在SpEL&#xff08;Spring表达式语言&#xff09;中进行类型转换的核心接口&#xff0c;它允许将不同类型的对象相互转换&#xff0c;例如将字符串转…...

优化 Web 性能:压缩 CSS 文件(Unminified CSS)

在 Web 开发中&#xff0c;CSS 文件的大小直接影响页面加载速度和用户体验。Google 的 Lighthouse 工具在性能审计中特别关注“未压缩的 CSS 文件”&#xff08;Unminified CSS&#xff09;&#xff0c;指出未经过压缩的样式表会增加不必要的字节&#xff0c;拖慢页面渲染。本文…...

每日一个小病毒(C++)EnumChildWindows+shellcode

这里写目录标题 1. `EnumChildWindows` 的基本用法2. 如何利用 `EnumChildWindows` 执行 Shellcode?关键点:完整 Shellcode 执行示例3. 为什么 `EnumChildWindows` 能执行 Shellcode?4. 防御方法5. 总结EnumChildWindows 是 Windows API 中的一个函数,通常用于枚举所有子窗…...

leetcode数组-移除元素

题目 题目链接&#xff1a;https://leetcode.cn/problems/remove-element/ 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为…...

Git 教程:从 0 到 1 全面指南 教程【全文三万字保姆级详细讲解】

目录 什么是 Git &#xff1f; Git 与 SVN 区别 Git 安装配置 Linux 平台上安装 Centos/RedHat 源码安装 Windows 平台上安装 使用 winget 工具 Mac 平台上安装 Git 配置 用户信息 文本编辑器 差异分析工具 查看配置信息 生成 SSH 密钥&#xff08;可选&#xf…...