#include <iostream>
#include<iostream>
#include<cstdlib>
#include <type_traits>
using namespace std;
template <class _Ty>
_NODISCARD constexpr _Ty&& forwardtt(
remove_reference_t<_Ty>& _Arg) noexcept { // forward an lvalue as either an lvalue or an rvalue
return static_cast<_Ty&&>(_Arg);
}
template <class _Ty>
_NODISCARD constexpr _Ty&& forwardtt(remove_reference_t<_Ty>&& _Arg) noexcept { // forward an rvalue as an rvalue
static_assert(!is_lvalue_reference_v<_Ty>, "bad forward call");
return static_cast<_Ty&&>(_Arg);
}
void processValue(int& a) { cout << "lvalue" << endl; }
void processValue(int&& a) { cout << "rvalue" << endl; }
template <typename T>
void forwardValue(T&& val)
{
processValue(forwardtt<T>(val)); //照参数本来的类型进行转发。
}
template <typename T>
void nforwardValue(T&& val)
{
processValue(val); //照参数本来的类型进行转发。
}
template <typename T>
void moveValue(T&& val)
{
processValue(std::move(val)); //照参数本来的类型进行转发。
}
void Testdelcl()
{
int i = 0;
forwardValue(i); //传入左值
forwardValue(0);//传入右值
nforwardValue(i); //传入左值
nforwardValue(0);//传入右值
moveValue(i); //传入左值
moveValue(0);//传入右值
}
using namespace std;
int g_constructCount = 0;
int g_copyConstructCount = 0;
int g_copyRConstructCount = 0;
int g_destructCount = 0;
struct A
{
A() {
cout << "construct: " << ++g_constructCount << " ptr:" << this << endl;
}
A(const A& a)
{
cout << "copy & construct: " << ++g_copyConstructCount << " ptr:" << this << " other:" << &a << endl;
}
A(A&& a)
{
cout << "copy && construct: " << ++g_copyRConstructCount << " ptr:" << this << " other:" << &a << endl;
}
~A()
{
cout << "destruct: " << ++g_destructCount << " ptr:" << this << endl;
}
void Print()
{
cout << "111" << " ptr:" << this << endl;
}
};
A GetA()
{
A a = A();
return a;
}
A&& GetAA()
{
return A();
}
void GetA(A& a)
{
}
class RTTPrint
{
public:
RTTPrint(int number)
{
m_number = number;
cout<< "begin:" << m_number << endl;
}
~RTTPrint()
{
cout << "end :"<< m_number << endl;
}
int m_number;
};
int main()
{
int nCounter = 0;
{
Testdelcl();
}
{
RTTPrint rtt(nCounter++);
A a = GetA();
cout << "haha " << endl;
a.Print();
}
{
RTTPrint rtt(nCounter++);
A&& a = GetA();
cout << "haha " << endl;
a.Print();
}
{
RTTPrint rtt(nCounter++);
A b;
GetA(b);
}
{
RTTPrint rtt(nCounter++);
A a = GetAA();
}
{
RTTPrint rtt(nCounter++);
A&& a = GetAA();
cout << "haha " << endl;
a.Print();
}
return 0;
}
lvalue
rvalue
lvalue
lvalue
rvalue
rvalue
begin:0
construct: 1 ptr:0135FCEB
copy && construct: 1 ptr:0135FE53 other:0135FCEB
destruct: 1 ptr:0135FCEB
haha
111 ptr:0135FE53
destruct: 2 ptr:0135FE53
end :0
begin:1
construct: 2 ptr:0135FCEB
copy && construct: 2 ptr:0135FE2F other:0135FCEB
destruct: 3 ptr:0135FCEB
haha
111 ptr:0135FE2F
destruct: 4 ptr:0135FE2F
end :1
begin:2
construct: 3 ptr:0135FE17
destruct: 5 ptr:0135FE17
end :2
begin:3
construct: 4 ptr:0135FC33
destruct: 6 ptr:0135FC33
copy && construct: 3 ptr:0135FDFF other:0135FC33
destruct: 7 ptr:0135FDFF
end :3
begin:4
construct: 5 ptr:0135FC33
destruct: 8 ptr:0135FC33
haha
111 ptr:0135FC33
end :4
1.1sys模块在使用python开发脚本的时候,作为一个运维工具,或者是其他工具需要在接受用户参数运行时,这里就可以用到命令行传参的方式,可以给使用者一个比较友好的交互体验。python可以使用sys模块中的sys.argv命令来获取命令行参数,其中返回的参数是一个列表在实际开发中,我们一般都使用命令行来执行python脚本使用终端执行python文件的命令:python指定文件名importsys #使用sys.argv来获取命令行参数 #在终端使用python指定python文件名来执行python文件 print('命令行参数的个数%s'%len(sys.argv)) #命令行参数的个数1 print('命令行参数%s'%sys.argv) #命令行参数['index.py'] #因为此时只有一个参数,那么就是这个python文件 #终端执行的命令为:pythonindex.py复制argv返回命令行参数的一个列表,其中第一个元素是py的文件名。如果不想获取到文件名,那么完全可是使用切片的方式,因为命令行返
前言最近项目使用到中间件,自己以前也对kafka原理应用垂涎已久了,故这个周末抽空总结一波。Kafka是什么?ApacheKafka是分布式发布-订阅消息系统,在kafka官网上对kafka的定义:一个分布式发布-订阅消息传递系统。它最初由LinkedIn公司开发,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。开源消息中间件不止kafka一种,如下图:各消息队列对比,Kafka深度解析,众人推荐,精彩好文:http://blog.csdn.net/allthesametome/article/details/47362451 为什么使用消息中间件?解耦快递小哥手上有很多快递需要送,他每次都需要先电话一一确认收货人是否有空、哪个时间段有空,然后再确定好送货的方案。这样完全依赖收货人了!如果快递一多,快递小哥估计得忙疯了……如果有了便利店,快递小哥只需要将同一个小区的快递放在同一个便利店,然后通知收货人来取货就可以了,这时候快递小哥和收货人就实现了解耦!异步快递小哥打电话给我后需
区块链以太坊介绍一、区块链1.分布式去中心化比特币设计的初衷就是要避免产生依赖信息中心化的机构,没有通过发行管理机构,也不可能操纵发行企业数量。既然我们没有文化中心化的信用服务机构,在电子公司货币资金运行的过程中,也势必需要作为一种激励机制来认可运行在区块链上的行为,这种影响机制研究就是社会共识机制。在完全去中心化的区块链上运行的比特币,采用的是PoW(ProofofWork,工作量证明),该机制完美的解决了信用问题(存在一些异常的情况下仍能达成目标一致)。因为网络技术架构为分布式,对单独使用一个重要节点是无法实现控制或破坏整个国家网络,掌握网内51%的运算处理能力才有可能出现操作交易,而这个代价大概要超过270亿美元。2.无须信任整个区块链网络中的数据是公开信息透明的,每个参与者都可进行自由选择加入该网络中,下载到所有的数据。任意两个重要节点间的数据可以交换无需互相信任,依靠区块链中的交易市场历史和数据的可追溯,以及社会共识机制来保证企业数据作为交换的正确且不可逆的执行。3.篡改和加密安全性区块链的数据结构和交易流程中大量的使用了公私钥来加解密,保证了数据安全性。在该技术基础上,甚至
什么是双向RNN?双向RNN是RNN的一种变体,它对于自然语言处理任务特别有用,并且有时可以提高性能。BD-RNN使用两个常规的RNN,其中一个是顺序数据向前移动,另一个是数据向后移动,然后合并它们的表示。此方法不适用于时间序列数据,因为按时间顺序表示的含义更抽象。例如,在预测接下来会发生什么时,最近的事件应该具有更大的权重确实是有意义的。而在语言相关问题中,“tahehtnitac”和“catinthehat”显然不应该具有真正的更高的抽象意义。“Tah”和“hat”都指的是同一个物体。当我们谈论回文,比如“Bob”或“racecar”时,它也是一个非常有意思的问题。fromkeras.datasetsimportimdb fromkeras.preprocessingimportsequence fromkerasimportlayers fromkeras.modelsimportSequential max_features=10000 maxlen=500 (x_train,y_train),(x_test,y_test)=imdb.load_data(num_words
git备忘清单一份简简单单的git备忘录清单gitinit#初始化本地git仓库(创建新仓库) gitconfig--globaluser.name"xxx"#配置用户名 gitconfig--globaluser.email"xxx@xxx.com"#配置邮件 gitconfig--globalcolor.uitrue#gitstatus等命令自动着色 gitconfig--globalcolor.statusauto gitconfig--globalcolor.diffauto gitconfig--globalcolor.branchauto gitconfig--globalcolor.interactiveauto gitconfig--global--unsethttp.proxy#removeproxyconfigurationongit gitclonegit+ssh://git@192.168.53.168/VT.git#clone远程仓库 gitstatus#查看当前版本状态(是否修改) gitaddxyz#添加xyz文件至
有两个容量分别为x升和y升的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好z升的水?如果可以,最后请用以上水壶中的一或两个来盛放取得的z升水。你允许:装满任意一个水壶清空任意一个水壶从一个水壶向另外一个水壶倒水,直到装满或者倒空示例1:(Fromthefamous"DieHard"example)输入:x=3,y=5,z=4 输出:True复制示例2:输入:x=2,y=6,z=5 输出:False复制读题就很费劲但是题目应该不难输入:x=3,y=5,z=4输出:True这个就是5-3=2然后重复两次?所以可以控制的最小计量单位就是x和y的最大公倍数?classSolution{ public: intgcd(inta,intb){ returnb==0?a:gcd(b,a%b); } boolcanMeasureWater(intx,inty,intz){ if(x+y<z){ returnfalse; } if(x==z||y==z||x+y==z){ returntrue; } returnz%gcd(x,y)==0; } };复制设
Laravel中模型事件什么意思?Laravel已经实现定义了不少的模型事件:creating,created,updating,updated,saving,saved,deleting,deleted,restoring,restored如上名称,代表在具体的模型中,当发生:正在新增、已新增、已更新...模型时,要去触发的一些事件。1.events属性无道愣是没测试成功,估计哪步没对。就是在模型文件中定义一些属性 A.在app/Providers/EventServiceProvider.php定义classEventServiceProviderextendsServiceProvider { protected$listen=[ 'App\Events\UserEvent'=>[ 'App\Listeners\UserListener', ], ]; }复制App\Events\UserEvent和App\Listeners\UserListener按照模型名称自定义修改即可。然后运行:phpartisanevent:gener
本章主要内容:介绍Wi-FiP2P相关知识;介绍Android中WifiP2pService、wpa_supplicant的相关代码。7.1概述承接第6章介绍的WSC,本章将继续介绍Wi-FiAlliance(Wi-Fi联盟)推出的另外一项重要技术规范Wi-FiP2P。该规范的商品名为Wi-FiDirect,它支持多个Wi-Fi设备在没有AP的情况下相互连接。在Android平台的Wi-Fi相关模块中,P2P的功能点主要集中在:AndroidFramework中的WifiP2pService,其功能和WifiService类似,用于处理和P2P相关的工作。wpa_supplicant中的P2P模块。和WSC一样,本章的分析拟采用如下方法:首先将介绍P2P所涉及的基础知识。然后再分析和P2P相关的模块,包括Settings、WifiP2pService以及WPAS。下面,先来认识一下P2P。7.2P2P基础知识介绍WFA定义的P2P协议文档全名为“Wi-FiPeer-to-Peer(P2P)TechnicalSpecification”,目前的版本为1.1,全长160页。P2P技术使得多
当雇佣了新员工之后,人们可能会让他们通过看教学视频来熟悉新工作;但是当人们买了新的机器人之后该怎么办呢?2015年12月18日,据来自康奈尔大学网站的消息称,该校的研究人员正利用相应技术帮助机器人通过视频学习新的技能。康奈尔大学的研究人员正在利用相应技术“教会”机器人通过看视频来学习完成某个任务的具体步骤。研究人员无需为机器人播放DVD,因为机器人自己会去YouTube上查找所需要的学习视频。这项研究着眼于未来可能出现的帮助人们处理日常家务的“个人机器人”,诸如做饭、洗碗、喂猫、帮扶老年人和残疾人的机器人。研究人员给该项目命名为“RoboWatch”。该项目的一个前提是很多教学视频都具有相同的基本结构,另外网上也有充足的资源可用。YouTube上就有18万份关于“如何做煎蛋卷”的视频,有28万1千份关于“如何打领结”的视频。通过扫描同一个任务的多个教学视频,机器人就能提取出它们的共同部分,并将这些共同部分简化成具体的操作步骤。这个系统的一个主要特征是无监督性。以前的一些研究都需要人类向机器人解释它正在观察的东西才能帮助其进行学习;譬如,人类需要给机器人看标有名称的物体照片来让机器人识别
开发背景Github&Coding的服务差异Hexo站点搭建Github操作方法认证模式:SSH设置SSH_config.yml设置创建GithubActionCoding操作方法SSH认证模式的问题认证模式:TokenConfig.yml设置创建持续集成任务Troubleshoot版本不同Hint-考虑使用cnpm或yarnNiceWork!!!Coding单Repo多仓库操作方法参考文献2020-03-15:以下两个方法测试通过 最终搭建的知识库链接:https://note.szhshp.org 开发背景 为知笔记的搜索太慢了.我想要迁移笔记.我想要迁移笔记.我想要迁移笔记.我想要迁移笔记.我想要迁移笔记.我想要迁移笔记.我想要迁移笔记.我想要迁移笔记.我很需要迁移笔记.为知笔记的搜索太慢了.希望能有一个免费的笔记托管平台.Github&Coding的服务差异 主要配置:一个SourceRepo,用于存放源码一个ReleaseRepo,用于存放build之后的pages文件Pages服务的限制:Github的pages服务repo必须设置为开源,因此SourceR
安装nginx-controller并暴露nodePort helmrepoaddingress-nginxhttps://kubernetes.github.io/ingress-nginx/ helmrepoupdate helminstallgatewayingress-nginx/ingress-nginx--setcontroller.service.type=NodePort--setcontroller.admissionWebhooks.enabled=false kubectlpatchsvcgateway-ingress-nginx-controller-p'{\"spec\":{\"ports\":[{\"name\":\"http\",\"nodePort\":30882,\"port\":80,\"protocol\":\"TCP\",\"targetPort\":30882},{\"name\":\"https\",\"nodePort\":30883,\"port\":443,\"protocol\":\"TCP\",\"targetPort\":308
重写了一遍,从TLE进不到WA了。。。我实在找不出错误在哪了。。。先放着,等过段时间刷顺利指南的时候再来看这题。。 #include<bits/stdc++.h> #defineREP(i,a,b)for(inti=a;i<=b;i++) #defineMS0(a)memset(a,0,sizeof(a)) #definekey_valch[ch[rt[i]][1]][0] usingnamespacestd; typedeflonglongll; constintmaxn=2000100; constintINF=1e9+10; intn,m; structQuery { charop;intx,k; };Queryq[maxn];intqn; structEdge { intu,v; boolexi; };Edgee[maxn]; charops[20];intx;llk; llvp[maxn]; intfa[maxn]; intu,v; intpre[maxn],sz[maxn],ch[maxn][2],rt[maxn],tot1; ints[max
一、背景 针对项目已经开发完的接口,都需要加上传输数据加密的功能,对接口入参进行AES解密,对接口出参进行加密。考虑到尽量改动少点,使用自定义注解结合springmvc里的RequestBodyAdvice和ResponseBodyAdvice两个类进行实现。 RequestBodyAdvice允许针对接口请求体被读取之前进行修改,ResponseBodyAdvice允许接口出参在被返回之前进行修改。 二、实现 1、新建两个自定义注解类,用来标记哪些接口需要进行加密解密。 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public@interfaceEncrypt{ }复制 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD,ElementType.PARAMETER}) @Documented public@interfaceDecrypt{ }复制 注意:@Decrypt配置的作用域是方法和参数上,@Encrypt则是
<template> <divstyle="margin:10px;"> <el-card> <el-tableref="multipleTable":data="tableData"borderstyle="width:100%;"> <el-table-columntype="index"label="序号"width="200px"align="center"></el-table-column> <el-table-columnprop="ticket_name"label="票据"align="center"></el-table-column> &n
码农多年后的个人总结,干货满满,入口甘甜~ 声明 本文不是技术文,是个人的从业总结,且对象是指大部分人,不是针对各位牛人,亦不是指个例,如有过错,还请指出,作者会马上发表官方道歉声明,9行道歉,100行广告那种!(开个玩笑,哈哈) 文章各要点简洁,相信各位看官不会很累。(我写的很慢,所以你们看的也就不会很快,就不会很累) 以下就是干货要点: 多喝热水!(代码比不过大神,咱们比养生!!!) 这真不是直男发言,健康第一,多喝水能多上厕所,能多走动,还能助力新陈代谢。 最主要的是,能帮你在卡Bug的时候冷静下来,有的时候没有思路,上个厕所,就有了。 码农不止眼前的代码,还有工作的软技能 不要只沉浸在代码里,码农还需要沟通!沟通!PPT!PPT!对象!对象!(注:此处对象仅代表女朋友) 沟通、找对象、交朋友、管理等技能重要性不比代码低。 哪怕你是选择做一个纯粹的技术人员、跟领导、设计人员、产品经理等沟通也是非常必要的一项技能。 希望不要只沉浸在代码里无法自拔。 此处仅举例几个软技能,实际远不止如此,切莫只卡在代码上。 程序员35岁的坎你不是不知道,多学习些其他技能。技多不压身嘛。 工欲
M×NPuzzle Sol: \(N*M\)数码某局面到达另一局面的可行性判定 可以通过逆序对个数的奇偶性是否相同来判定。 我们将这\(N*M-1\)个数写成一列来看。 考虑行为奇数,列为奇数的情况->逆序对个数奇偶性相同时可达 空格左右移动不会改变逆序对的个数,而上下移动相当于改变了该列前后共\(M-1\)个数的逆序对个数,由于\(M-1\)是偶数,所以移动前后逆序对个数奇偶性不变。 考虑行为奇数,列为偶数的情况->(逆序对个数+前后状态空格行数之差)奇偶性相同时可达 上下移动会改变共\(M-1\)个数的逆序对个数,而\(M-1\)是奇数,当上下移动了偶数行时,奇偶性不变;上下移动了奇数行时,奇偶性改变。 行为偶数时,同上。 ACCODE: SourceCode #include<cstdio> #include<cstring> #include<algorithm> usingnamespacestd; intread(){ intx=0,f=1;charch=''; while(ch>'9'||ch<'0'){
对音频设备的操作主要是初始化音频设备以及往音频设备发送PCM(PulseCodeModulation)数据。为了方便,本文使用ALSA(AdvancedLinuxSoundArchitecture)提供的库和驱动。在编译和运行本文中的MP3流媒体播放器的时候,必须先安装ALSA相关的文件。 本文用到的主要对PCM设备操作的函数分为PCM设备初始化的函数以及PCM接口的一些操作函数。PCM硬件设备参数设置和初始化的函数有: int snd_pcm_hw_params_malloc (snd_pcm_hw_params_t **ptr) int snd_pcm_hw_params_any (snd_pcm_t *pcm, snd_pcm_hw_params_t *params) void snd_pcm_hw_params_free (snd_pcm_hw_params_t *obj)
实验4:开源控制器实践——OpenDaylight 一、实验目的 能够独立完成OpenDaylight控制器的安装配置; 能够使用Postman工具调用OpenDaylightAPI接口下发流表。 二、实验环境 下载虚拟机软件OracleVisualBox或VMware; 在虚拟机中安装Ubuntu20.04Desktopamd64,并完整安装Mininet; 三、实验要求 (一)基本要求 配置JAVA环境,下载并解压安装OpenDaylight,版本选择Carbon或Beryllium; 下载并解压安装Postman; 利用Mininet平台搭建下图所示网络拓扑,并连接OpenDaylight控制器; ·搭建目标拓扑 通过Postman工具调用OpenDaylight提供的API下发流表,实现拓扑内主机h1和h3网络中断10s。 (二)进阶要求 查找资料,整理和记录ODL控制器主要的RESTAPI文档,包括但不限于ODL提供的文档链接,获取拓扑的交换机、获取流表状态数量、获取特定交换机端口的状态、获取特定交换机端口的状态等。 ·获取拓扑的交换机 http://