c++新特性
此文非原创内容搬运自,:学习笔记:C++
11新特性.md
c++新特性
C++11引入了auto和decltype关键字,使用它们可以在编译期就推导出变量或者表达式的类型,方便开发者编码的同时也简化了代码。
auto
auto可以让编译器在编译器就推导出变量的类型,看代码:
123auto a = 10; // 10是int型,可以自动推导出a是intint i = 10;auto b = i; // b是int型auto d = 2.0; // d是double型
这就是auto的基本用法,可以通过=右边的类型推导出变量的类型。
auto推导规则
直接看代码
代码1:
1234int i = 10;auto a = i, &b = i, *c = &i; // a是int,b是i的引用,c是i的指针,auto就相当于intauto d = 0, f = 1.0; // error,0和1.0类型不同,对于编译器有二义性,没法推导auto e; // error,使用auto必须马上初始化,否则无法推导类型
代码2:
123456789101 ...
QT源码调试
QT源码调试
方法1
打开QT安装目录下C:\Qt\Qt5.14.2的维护工具,MainTenanceTool.exe
在设置中点击资料档案库,添加对应版本的地址,我的是QT5.14.2
descript
123https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt5_5142_src_doc_examples/https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/tools_mingw/https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt5_5142/
选择添加或移除组件,勾选QT Debug Infomation Files,下一步安装即可。
但是,一些QT版本不支持在线下载,维护工具内没有下载QT Debug Infomation Files选项,则需要使用另一种手动下载配置的方法。
方法2
手动下载QT
...
QT样式qss设置
QT样式qss设置
QLineEdit
12345678910111213141516171819202122232425262728293031323334353637QLineEdit { border: 1px solid #A0A0A0; /* 边框宽度为1px,颜色为#A0A0A0 */ border-radius: 3px; /* 边框圆角 */ padding-left: 5px; /* 文本距离左边界有5px */ background-color: #F2F2F2; /* 背景颜色 */ color: #A0A0A0; /* 文本颜色 */ selection-background-color: #A0A0A0; /* 选中文本的背景颜色 */ selection-color: #F2F2F2; /* 选中文本的颜色 */ font-family: "Microsoft YaHei"; /* 文本字体族 */ font-size: 20pt; /* 文本字体大小 */}QLineEdit:hover { /* 鼠标 ...
Windows脚本命令
Windows脚本命令
文件夹管理
cd 显示当前目录名或改变当前目录。
md 创建目录。
rd 删除一个目录。
dir 显示目录中的文件和子目录列表。
tree 以图形显示驱动器或路径的文件夹结构。
path 为可执行文件显示或设置一个搜索路径。
xcopy 复制文件和目录树。
文件管理
type 显示文本文件的内容。
copy 将一份或多份文件复制到另一个位置。
del 删除一个或数个文件。
move 移动文件并重命名文件和目录。(Windows XP Home
Edition中没有)
ren 重命名文件。
replace 替换文件。
attrib 显示或更改文件属性。
find 搜索字符串。
fc 比较两个文件或两个文件集并显示它们之间的不同
网络命令
ping 进行网络连接测试、名称解析
ftp 文件传输
net 网络命令集及用户管理
telnet 远程登陆
ipconfig显示、修改TCP/IP设置
msg 给用户发送消息
arp 显示、修改局域网的IP地址-物理地址映射列表
系统管理
...
c++智能指针
c++智能指针
std::shared_ptr
std::weak_ptr
std::unique_ptr
一、shared_ptr
最常用的只能指针类,具有自动delete对象,引用计数等功能。
头文件 1#include <memory> 构造方法 123456// 较优auto smart_ptr = std::make_shared<int>();// 不推荐auto p1 = new int;std::shared_ptr<int> smart_ptr2(p1);
返回裸指针
12auto smart_ptr = std::make_shared<int>();auto originPtr = smart_ptr.get();
shared_ptr模板类常用成员方法
成员方法名
功 能
operator=()
重载赋值号,使得同一类型的 shared_ptr 智能指针可以相互赋值。
operator*()
重载 * 号,获取当前 shared_pt ...
c++异常捕获
一、try
与__try的区别
Release方式下如果选择了编译器代码优化选项,则VC编译器会去搜索try块中的代码,
如果没有找到throw代码, 他就会认为try catch结构是多余的, 给优化掉。
这样造成在Release模式下,上述代码中的异常不能被捕获,从而迫使程序弹出错误提示框退出。
https://stackoverflow.com/questions/7049502/c-try-and-try-catch-finally
二、捕获方法
1. 全局捕获A
12// 单独用这种方法能捕获到异常,但是程序仍然自行退出!!::SetUnhandledExceptionFilter(unKnownExceptionFilterWrapper);
qt会提示Qt has caught an exception thrown from an event handler.
Throwing exceptions from an event handler is not supported in Qt. You
must not let any exceptio ...
c++forward用法
原理:完美转发
std::forward不是独自运作的,完美转发 = std::forward + 万能引用 +
引用折叠。三者合一才能实现完美转发的效果。
基本作用
将一个参数的左右值特性原封不动地转发给其他函数。
案例分析
逐步分析以下demo函数输出的结果
123456789101112131415161718192021namespace XForward{ void func(int& x) { qInfo() << "lvalue " << x ; } void func(int&& x) { qInfo() << "rvalue " << x ; } template<typename T> void wrapper(T&& arg) { func(arg); //arg此时已经是个左值了,永远调用左值版本的func func(std::forw ...
命令行速查
virtualenvs虚拟环境配置
安装虚拟环境依赖
先安装虚拟环境的依赖库:
123sudo pip install virtualenvsudo pip install virtualenvwrapper(virtualenvwrapper-win
创建虚拟环境管理目录:
1mkdir ~/.virtualenvssudo vim ~/.bashrc#在.bashrc的末尾增加下面两行内容export WORKON_HOME=$HOME/.virtualenvs # 所有虚拟环境存储的目录source /usr/local/bin/virtualenvwrapper.sh #激活虚拟环境source ~/.bashrc #激活
创建虚拟环境
123456789>>>mkvirtualenv new_vir --python=python3#创建新的虚拟环境为new_vir# todo>>>mkvirtualenv -p /usr/bin/python3 new_vir #制定虚拟环境的python为local的python3> ...
c++move用法
1、区分左值与右值的区别
左值与右值的根本区别在于是否允许取地址&运算符获得对应的内存地址。
变量可以取地址,所以是左值,但是常量和临时对象等不可以取地址,所以是右值。
左值是表达式结束后依然存在的持久对象(代表一个在内存中占有确定位置的对象)。
右值是表达式结束时不再存在的临时对象(不在内存中占有确定位置的表达式)。
所有的具名变量或者对象都是左值,而右值不具名。
对表达式取地址,如果能,则为左值,否则为右值。
常见的右值:“abc",123等都是右值。
右值引用,可以延长右值的生命周期
123int&& i = 123;int&& j = std::move(i);int&& k = i;//编译不过,这里i是一个左值,右值引用只能引用右值
2、Move
用法1 转移所有权
将快要销毁的对象转移给其他变量,这样可以继续使用这个对象,而不必再创建一个一样的对象,省去了创建新的一样内容的对象,也就提高了性能。
1234567891011121314151617181920// move exampl ...
数据拟合方法
以拟合直线为例,分析总结几种方法,有最小二乘法、Ransac、Tukey、Huber。
image-20230701111935103
最小二乘法(Least Squares
Method)
一种常用的参数估计方法,用于拟合数据点集到一个数学模型。它的目标是找到最优参数,使得模型预测值与实际观测值之间的残差平方和最小化。
在直线拟合问题中,最小二乘法可以用于找到最优的斜率和截距,使得直线与数据点的残差平方和最小化。
最小二乘法的优点是简单直观,但对异常值敏感。 demo1
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253#include <iostream>#include <vector>#include <cmath>// 直线结构体,包含斜率和截距struct Line { double slope; double intercept;};// ...