自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(97)
  • 收藏
  • 关注

原创 VS调试release程序

按如下设置vs工程属性:cmake生成带调试信息的release工程set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -Od -Wall") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_...

2023-01-10 20:01:00 103

原创 Linux grep

基本用法grep str file在文件file中查找字符串strgrep -n str file使用-n选项查找字符串str常用选项-i 不区分大小写(默认是区分大小写的)-n 输出该字符串所在行的行号--color 查找到的字符串高亮显示(ubuntu默认高亮)-c 统计符合条件的总行数-o 只输出匹配到的关键字,会将一行中匹配到的多个关键字分行打印,比如某一行匹配到了2个结...

2023-01-03 09:10:00 117

原创 Git入门

git

2022-11-01 11:25:01 1610 2

原创 Qt事件exec, eventloop

一、Qt事件循环(eventloop)1.事件循环一般用exec()函数开启。QApplicaion::exec()、QMessageBox::exec()都是事件循环。其中前者又被称为主事件循环。事件循环首先是一个无限“循环”,程序在exec()里面无限循环,能让跟在exec()后面的代码得不到运行机会,直至程序从exec()跳出。从exec()跳出时,事件循环即被终止。QEventLo...

2022-09-21 09:47:00 489

原创 C++之inline

为什么使用inline为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)inline和宏定义的区别与联系inline既有宏定义效率高的优点,又有类型检查的安全,可以说inline的出现就是在某些情况下取代宏定义内联函数与一般函数区别内联函数比一般函数在前面多一个inline修饰符。内联函数是直接复制“镶嵌”到主函数中去的,就是将内联函数的代码直接放在内联函数的位置上,这与一般函数...

2022-06-29 20:07:00 35

原创 C++Boost的使用

下载到Boost官网下载安装运行 bootstrap.bat(Win) boostrap.sh(Linux),会在当前目录下生成一个 b2.exe ,然后在命令行输入b2 --build .以及b2 --install .将boost库安装到默认目录下,Windows是C:\\使用CMake配置Boostcmake_minimum_required (VERSION 3.8)s...

2022-05-26 09:12:00 82

原创 使用VS调试Linux程序

参考:用vs编写和调试linux C++程序Windows自带Linux子系统以下示例使用VS2022 WSL2:Ubuntu22.04一、VS以Linux环境调试Sln工程1.安装远程调试所需软件包gdbserver和gdb用于远程调试;SSH协议族可以进行远程控制,openssh是其开源实现;build-essential软件包作用:提供编译程序必须软件包的列表信息,编译程序...

2022-05-23 15:13:00 123

原创 Git

git常见命令使用方法Linux使用Git$ sudo apt install git # 安装git$ git config --global user.name "user name"$ git config --global user.email "user email"$ sudo apt install ssh # 安装ssh$ ssh-keygen -t rsa ...

2022-05-11 16:07:00 25

原创 C++std::thread调用带参数和返回值的函数

std::move,std::ref,引用等用法std::bind用法一、线程调用的函数含有参数多线程中的函数参数如果为引用必须使用std::ref(函数式编程的参数默认使用拷贝方式),多线程中的函数参数如果为IO(socket应该也需要,没有测试过)必须使用移动语义(std::move),避免多个对象同时读写同一个IO缓冲点击查看代码#include <thread>...

2022-03-01 16:00:00 595

原创 std::bind,std::mem_fn,std::invoke

一、std::bindstd::bind会把所有参数都拷贝,即使它是个左值引用。std::thread就是最好的例子,std::ref也是为了std::bind而引入的std::bind的第一个参数是函数名,普通函数做实参时,会隐式转换成函数指针。绑定类成员函数时,第一个参数表示对象的成员函数的指针,第二个参数表示对象的地址。因为编译器不会将对象的成员函数隐式转换成函数指针,所以必须在对象的...

2022-02-28 19:56:00 110

原创 std::move()和std::forward()

std::move和std::forward本质就是一个转换函数,std::move执行到右值的无条件转换,std::forward执行到右值的有条件转换,在参数都是右值时,二者就是等价的一、完美转发 std::forward中文标准库:std::forwardstd::forward是一个模板函数,实现了参数在传递过程中保持其值属性的功能,模板参数决定了它返回的是左值还是右值。二、...

2022-02-28 17:25:00 69

原创 左值,右值,右值引用,std::ref(),std::reference_wrapper

中文标准库:值类别 | 值类别的翻译转载:C++中的左值和右值 | 转载:C++中的右值引用和移动一、左值(lvalue):简单的来说,能取地址的变量一定是左值,有名字的变量也一定是左值,最经典的void fun(p&& shit),其中shit也是左值,因为右值引用是左值(所以才会有move,forward这些函数的产生,其中move出来一定是右值,forward保持变...

2022-02-28 17:21:00 41

原创 Qt使用VTK遇到的一些问题

一、vtkOrientationMarkerWidget在Qt窗口中不显示注意this->setRenderWindow(renderWindow);和this->renderWindow()->AddRenderer(renderer);以及omw->EnabledOn();代码段的位置vtkOrientationMarkerWidget不要在局部使用智能指...

2022-02-18 15:49:00 396

原创 pimpl模式,编译防火墙

转载:C++中非常有用的设计模式pimplcppconimperfectcpppattern// MyClass.hclass MyClass {public: void func1(); void func2();private: void func3(); void func4(); int a; int b;};假设我们在开...

2022-01-04 11:22:00 36

原创 type_traits 获取指针指向值的类型

在中文标准库中这一部分被叫作编译时类型信息中文标准库type_traits的一个简单应用:获取指针指向值的类型C++模板template#include <iostream>template <typename T>struct MyStruct{ //typedef typename T::value_type VT; ...

2021-11-19 15:54:00 40

原创 模板参数为bool,std::true_type,std::false_type

std::true_type和std::false_type是两个不同类型,bool是一个类型,true和false是bool类型的两个值#include <iostream>#include <type_traits>template <typename T>void fun_bool(T& val, std::true_type){ ...

2021-11-17 20:48:00 104

原创 bitset、bitmap

一、bitset中文标准库转载:C++bitset用法一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间。1.构造std::bitset<size> myBitset; 构造时必须用size声明bitset的大小,构造时可以用std::string,char*,ulonglong等初始化(string和char初始化时必须只包含0和1,否则抛出异常)...

2021-11-15 20:44:00 44

原创 this指针,this为空,nullptr访问成员函数

一、this的定义this指针是存在于类的成员函数中,指向被调用函数所在的类实例的地址。一个对象的this指针并不是对象本身的一部分,也就意味着并不会影响sizeof的结果。二、this的作用保存当前对象的地址,是一个常量指针,不允许改变this的值三、为什么使用this指针在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;当参数与成员变量名相同...

2021-11-11 13:57:00 134

原创 UML类图,用例图,时序图

一、UML类图转载:继承、实现、依赖、关联、聚合、组合的联系与区别转载:UML类图关系与符号简介类图中,为什么要区分依赖、关联、聚合、组合这四种关系?1. 继承类B继承自类A,即类A是类B的父类。2. 依赖依赖是一种弱的关系,表示一个类的方法的实现需要用到另一个类,但二者之间并没有明显的关系。类A是类B的局部变量、方法的参数,A和B之间的关系是偶然性的具有临时性。3.聚合聚...

2021-11-03 14:49:00 33

原创 常见的框架模式:MVC MVP MTV等

一、MVCModel-View-Controller(模型-视图-控制器)View层,单独实现了组合模式Model层和View层,实现了观察者模式View层和Controller层,实现了策咯模式观察者模式框架和设计模式的区别深入理解MVCmvp和mvc模式的区别二、MVP2. MVP3. MTV4. CBD5. ORM6. MVVM7. MVI...

2021-10-22 09:27:00 39

原创 C++无法解析的外部符号***,Qt无法解析的外部符号metaObject,Parentheses expected

一、VS报错无法解析的外部符号出现这个问题的根本原因是只有函数声明,没有函数定义是否添加了lib文件(调用动态库也需要lib)生成动态库时是否添加了导出符号__declspec(dllexport)CMake是否添加了相应的组件,例如Qt::Core Qt::Widgets.cpp,.cxx,.cc,.c文件格式是否正确,确保这些源文件被编译过。静态库Lib动态...

2021-09-29 09:34:00 147

原创 单例模式

一、单例模式的析构函数不要在单例模式的析构函数中释放单例二、单例模式懒汉式和饿汉式的区别1. 实例化:懒汉式默认不会实例化,外部什么时候调用什么时候new。饿汉式在类加载的时候就实例化,并且创建单例对象。2. 线程安全:饿汉式线程安全,在线程还没出现之前就已经实例化了,因此饿汉式线程一定是安全的。懒汉式线程不安全,因为懒汉式的是在使用时才会实例化,如果此时有多个线程都需要实例化,都...

2021-09-28 10:31:00 17

原创 队列 std::queue 双端队列 std::deque,优先级队列 std::priorty_queue

一、双端队列 std::deque中文标准库:std::deque转载:STL源码剖析——deque的实现原理和使用方法详解vectorsizeof(deque)std::deque(double-ended queue)双端队列,是有下标的顺序容器。它允许在其首尾两端快速插入及删除。另外,在deque任一端插入或删除不会非法化指向其余元素的指针或引用(例如vector删除第一个元素,...

2021-09-24 17:01:00 142

原创 C++万能容器 std::any

std::variant QVariant中文标准库:any初始化列表initializer_list使用anyany是一种很特殊的容器,它只能容纳一个元素,但这个元素可以是任意的类型,可以是基本数据类型(int,double,char,float...)也可以是复合数据类型(类、结构体)1.构造initializer_list使用any#include <iostream&g...

2021-09-24 11:19:00 96

原创 QVariant,std::variant,std::any,std::optional,std::visit,union

一、Qt中的QVariantQt中的QVariantQVariant和std::any有些类似,std::variant更像是std::any的一个子集二、C++标准库中的std::variant(C++17)QVariant和std::variant序列化与反序列化。(序列化就是把程序数据转换为可以传输或者写入文件的数据)转载:最常用的两种C++序列化方案中文标准库:std::va...

2021-09-24 11:16:00 154

原创 栈stack

中文标准库:std::stackC++内存中的堆和栈FILO:First In Last Out(先进后出)栈是适配器1.构造stack构造不能直接使用初始化列表 std::initializer_list。可以使用其他容器初始化stack,使用std::deque不需要指定容器,使用其他容器(例如:std::vector)需要指定容器。std::deque<int> m...

2021-09-24 11:12:00 12

原创 QVariant QVariantMap(List,Hash)QJson

对于QVariantList和QVariantMap以及QVariantHashQt头文件中有如下定义typedef QList<QVariant> QVariantList;typedef QMap<QString, QVariant> QVariantMap;typedef QHash<QString, QVariant> QVariantHash;...

2021-09-24 10:46:00 362

原创 C++模板之std::enable_if,函数模板的多态

中文标准库:enable_if一、模板原型template< bool B, class T = void >struct enable_if;当B为true时,则std::enable_if拥有等同于T的公开成员typedef type(即enable_if<B,T>::type);否则,无该成员typedef(VS会报错)二、示例void fun(){}...

2021-09-10 15:40:00 76

原创 C++封装,继承,多态,友元

转载:C++三大特性:封装、继承、多态一、封装publicprivateprotected二、继承final说明符0.类成员类型的区别public:可以被任意实体访问protected:只允许子类及本类的成员函数访问private:只允许本类的成员函数访问1.一个派生类继承了所有的基类方法,但下列情况除外:基类的构造函数、析构函数和拷贝构造函数。...

2021-08-20 16:03:00 25

原创 VAO VBO EBO RBO FBO PBO TBO UBO

转载:OpenGL图形渲染管线、VBO、VAO、EBO概念及用例转载:VBO,PBO,FBO以及各种OpenGL入门,球体绘制等(英文)1. VAO(Vertex Array Object)顶点数组对象转载:OpenGL缓冲区对象之VAOVAO简单理解其实代表的就是模型的数据,用来管理VBO或EBO,如果需要很多个模型,就需要有个id来区分,所以创建vao的时候会返回一个vaoID。VA...

2021-08-04 14:08:00 90

原创 策略模式

转载:策略模式策略模式 & 状态模式混合模式UNL类图Context向外暴露使用策略的接口,设置使用哪一个策略。Strategy策略基类,所有的策略类都继承自该类ConcreteStrategyA、ConcreteStrategyB具体的策略类,用来实现具体的解决方案。适用场合适合于一个问题有多种解决方案。比如排序时可以选择快排,堆排,冒泡,选择,插入等...

2021-08-03 10:42:00 15

原创 OpenGL入门

转载:OpenGL简介,环境配置,各种库介绍必看中文教程(glad+glfw)glaw官方文档书栈网:OpenGL教程(比较全)opengl-tutorial比较全的OpenGL教程转载:OpenGL简介一、GLUT(过时,非常不推荐使用)vs2019下使用OpenGL:  新建项目->项目->管理NuGet程序包->浏览->nupengl->点击下...

2021-08-02 14:49:00 21

原创 TCP、UDP、IP、TCP/IP、HTTP和Socket的区别与联系

转载:说说TCP、UDP、socket和Http之间联系和区别转载:OSI模型7层模型和TCP/IP五层模型OSI七层模型的划分OSI七层和TCP/IP五层对应关系TCP/IP五层模型每层的主要协议TCP协议面向连接的、可靠的、基于字节流的传输层通信协议TCP数据包结构:UDP协议无连接的传输层协议,提供面向事务的简单不可靠信息传送服务UDP数据包结构:IP协...

2021-07-12 17:02:00 51

原创 linux常用命令

一、文件与文件夹1.创建文件夹mkdir 文件夹名2.创建文件touch 文件名3.删除文件夹或文件rm 文件名删除文件rm -d 文件夹名删除空文件夹rm -r 文件夹名递归删除整个文件夹rm -r *清空当前文件夹rmdir 文件夹名 删除空文件夹ls|grep txt|xargs rm将当前目录下文件名包含txt的文件删除 grep使用方法find . -type f -nam...

2021-06-26 16:46:00 23

原创 std::unique,std::sort,std::erase

中文标准库:std::unique中文标准库:std::sort中文标准库:std::erase一、unique注意:unique是移除连续的重复元素,不连续的不会移除,因此如果要移除所有重复元素需要先进行排序对容器使用unique并不会使容器的元素个数减少,实际上容器的容量并没有改变,因此如果要移除容器中的连续重复元素需要配合std::erase返回值是:指向容器新结尾的前向迭代...

2021-06-24 16:53:00 24

原创 C++四种类型转换

和类型有关的所有内容(类型转换,类型识别,类型属性等)1.static_cast 基本的类型转换(编译期)用于进行比较“自然”和低风险的转换,如整型和浮点型、字符型之间的互相转换。另外,如果对象所属的类重载了强制类型转换运算符 T(如 T 是 int、int* 或其他类型名),则 static_cast 也能用来进行对象到 T 类型的转换。不能用于在不同类型的指针之间互相转换,也不能用于整型...

2021-06-10 19:44:00 21

原创 Dos命令

https://zhuanlan.zhihu.com/p/23085670https://www.cnblogs.com/panchanggui/p/9519099.htmldos = disk operat system(磁盘操作系统)bat脚本使用详解一、常用Dos命令windows dos命令中的路径分隔符应该使用\,命令中的参数可以叠加使用1.dir:显示当前目录下所有的文件...

2021-06-10 14:53:00 22

原创 find、find_if、find_first_of、find_if_not、search、二分查找

1.std::find:搜索等于 value 的元素中文标准库:find、find_if、find_if_not可能的实现:template<class InputIt, class T>InputIt find(InputIt first, InputIt last, const T& value){ for (; first != last; ++f...

2021-06-04 11:36:00 84

原创 观察者模式Observer Pattern

UML类图Observer(观察者基类)为那些在目标发生改变时需获得通知的对象定义一个更新接口。Subject(观察目标基类,可以理解为通知者)目标知道它的观察者(它被那些观察者观察)。可以有任意多个观察者观察同一个目标;提供注册和注销观察者对象的接口。ConcreteObserver(具体的观察者)维护一个指向ConcreteSubject对象的引用;...

2021-06-01 19:31:00 17

原创 双向链表std::list和单向链表std::forward_list

中文标准库:std::list中文标准库:std::forward_list一、简介list是由双向链表实现的,内存空间是不连续的。由链表的实现原理可知:优点:插入和删除非常快。只需要在插入的地方更改指针的指向即可,不用移动数据。缺点:不支持随机访问,查询效率较低,时间复杂度为O(n)forward_list是一个单向链表,只支持单向顺序访问,在链表的任何位置进行插入/删除操作...

2021-05-26 11:09:00 48

cgns测试文件staticmixer.cgns

cgns测试文件staticmixer.cgns

2022-11-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除