- 博客(118)
- 收藏
- 关注
原创 MinGw编译opencv教程
[首先上个参考链接:https://blog.csdn.net/m0_60352504/article/details/122321538](https://blog.csdn.net/m0_60352504/article/details/122321538)第二个参考:https://blog.csdn.net/qq_43627907/article/details/124769922编译时出现 Python 版本报错参考下面链接:https://blog.csdn.net/weixin_44
2022-05-22 22:04:52
1984
1
原创 Ubuntu添加git密钥
1、设置Git的user name和email:git config --global user.name "用户名"git config --global user.email "11@qq.com"查看用户名:git config user.name查看邮箱:git config user.email2、生成SSH密钥一、 查看是否已经有了ssh密钥: cd ~/.ssh如果没有密钥则不会有此文件夹,有则把.shh下的文件备份一下再删除此文件。二、生存密钥:ssh-keygen
2022-02-20 15:47:51
2264
原创 rbegin反向迭代器器
rbegin和crbegin将反向迭代器返回到反向向量的第一个元素。它对应于非反转向量的最后一个元素。如果向量为空,则返回的迭代器等于rend()。返回值:将迭代器反向到第一个元素。示例代码:std::vector<int> nums3{ 1,2,3,4,5,6,6,6,6,9 };std::vector<std::string> fruits2{ "orange", "apple", "raspberry" };std::cout<<"\nrbegin反
2022-01-23 16:42:26
635
原创 c++/c中解析ini开源库
文章目录inihIniparser 4simpleiniinihinih (INI Not Invented Here)是一个用 C 语言编写的简单的.INI 文件解析器。它只有几页代码,而且它被设计得小巧而简单,因此非常适合嵌入式系统。它也或多或少地与 Python 的ConfigParser样式的 .INI 文件兼容,包括 RFC 822 样式的多行语法和name: value条目。https://github.com/benhoyt/inihIniparser 4该模块提供了从 C 级别解析
2021-11-28 18:26:57
2771
原创 测试框架开源库
文章目录GoogleTest (Google 测试框架)GoogleTest (Google 测试框架)googletest 是一个由 Google 的测试技术团队开发的测试框架,它考虑到了谷歌的特定需求和限制。无论你使用的是 Linux、Windows 还是 Mac,只要你编写 C++ 代码,googletest 都可以帮到你。它支持任何类型的测试,不只是单元测试。https://github.com/google/googletest...
2021-11-28 15:41:50
260
原创 c++设置小数点的个数
//这里具体查一下digits10 setprecision(std::numeric_limits<long double>::digits10 + 1); long double df = 45.222249999; cout.setf(ios::showpoint); //显示位数 cout.precision(8); //小数位数 //固定浮点表示法 将 str 流的 floatfield 格式标志设置为固定。 cout.setf(ios::fixed); //s.
2021-11-27 15:41:44
1474
原创 cmake 报错 Could NOT find ZLIB (missing: ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
使用下面命令构建:cmake .. -DZLIB_INCLUDE_DIR=D:\Download\zlib\zlib-1.2.11 -DZLIB_LIBRARY=D:\Download\zlib\zlib-1.2.11\zlibstaticd.libcmake .. -DZLIB_INCLUDE_DIR=zlib路径 -DZLIB_LIBRARY=指向zlib编译后的lib路径我试过用cmake界面端创建这两个变量后构建失败,哪个行用哪个,反正就是创建两个变量后指定路径。...
2021-11-14 19:30:39
13073
4
原创 vector效率测试代码
#include "..\..\include\stlExample\Containers.h"#include "..\..\include\stlExample\StopWatch.h"//#include "StopWatch.h"#include <iostream>#include <boost/progress.hpp>#include <list>using namespace std;//vector性能测试void Contain.
2021-11-12 10:13:07
556
原创 提高STL vector性能的6个技巧
文章目录简介性能测试的实施方法一 、通过提前保留向量的大小来避免不必要的重新分配和复制周期二、使用shrink_to_fit()来释放vector ,别用clear()或erase()清除内容而不释放内存。三、当填充或复制到vector中时,最好选择 '=' 赋值而不是insert()或push_back()四、在迭代 vector 中的元素时,避免使用at() 函数五、vector别在头部插入数据6、vector插入数据时emplace_back比push_back效率高简介用Bjarne Stro
2021-11-10 20:55:25
1528
原创 C++ STL vector构造函数
文章目录一、 定义一、 定义std::vector<T,Allocator>::vector1vector();vector() noexcept(noexcept(Allocator()));constexpr vector() noexcept(noexcept(Allocator()));默认构造函数。使用默认构造的分配器构造一个空容器。2explicit vector( const Allocator& alloc );使用给定的分配器 alloc
2021-11-08 11:19:48
1232
原创 C++ STL中iterator迭代器移动操作
文章目录iterator迭代器简介:迭代器的操作:1. begin(): 该函数用于返回容器的开始位置2. end():该函数用于返回容器的后结束位置3. advance( ) 将迭代器往前或往后移动 n 个元素位置4. next:移动n位置后返回一个新迭代器5 . prev:移动n位置后,返回n的前一个迭代器6. inserter:在容器中的任意位置插入元素7. fill_n:在n开始的范围插入指定数量的值迭代器的类型:输入迭代器输出迭代器前向迭代器双向迭代器随机访问迭代器iterator迭代器简介:
2021-11-07 20:37:00
3919
原创 Linux命令集合
------------------------- centos --------------------------------------ip addr 【查ip】netstat -anp 【TCP类型的端口】yum update 【更新】sudo passwd root 【sudo允许用户以root用户身份】su root 【切换到root账号】这是由于CentOS的软件安装工具不是apt-get,而是yum,使用yum命令代替apt-get即可。在Linux系统中,当能pin
2021-11-07 16:57:38
561
原创 vs2019配置Linux环境
1:安装openssh-serverapt-get install openssh-server2:安装g++、gdb 和 gdbserver。其它方法:有些高版本Linux可以直接用下面命令安装所需要的全部:sudo apt-get install openssh-server g++ gdb gdbserver
2021-11-06 21:43:19
560
原创 Ubuntu安装和卸载VMware Tools
安装在虚拟机里面点击重新安装VMware Tools,然后linux磁盘目录里面会多出一个设备,里面是VMware Tools的压缩文件,把压缩文件复制到其它目录后解压,然后执行 ./vmware-install.pl 就能完成安装。 安装途中看到yes就输入yes,其它的提示就回车。卸载有时候安装之前得先卸载。在解压目录下的bin文件夹里面执行 vmware-uninstall-tools.pl 卸载脚本就行,这是官方的给的卸载脚本,能卸载干净。...
2021-11-05 16:49:48
2157
原创 boost编译独立库
会列出boost所有需要编译的库名称:b2 --show-libraries编译命令:b2 --with-algorithm --toolset=msvc-16.0 --stagedir=D:/lib/algorithm variant=debug link=static–with:为要编译的目标库,如date_time,regex等;–toolset=:为编译平台,vs2015=14.0 / vs2017=14.1;variant=:为 debug / release;link=:为链接
2021-11-03 15:45:43
287
原创 boost库常用功能记录
目录:boost::archive::binary_iarchive:序列化boost::timer:时间高精度,毫秒级单元测试,宏 BOOST_AUTO_TEST_CASEboost中的logboost::archive::binary_iarchive:序列化功能:把类的一个对象保存到文件中或者通过网络发出去时,可以把这个对象序列化,得到一个二进制字节流,或者XML格式表示等等。这样就可以保存这个对象到文件中或者通过网络发出去了。把序列化的数据进行反序列化,可以得到一个CCar对象。链接:htt
2021-10-29 15:57:07
740
原创 c++中ofstream和ifstream使用
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间。在C++中,还有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O。stream这个类有两个重要的运算符:1、插入器(<<)向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<“Write Stdout”<<’\n’;就表示把字符串"Write Stdout"和换行字符(’\n’)输
2021-10-29 09:54:39
254
原创 const修饰函数的作用
1、const在函数名后面表示是常成员函数,该函数不能修改对象内的任何成员,只能发生读操作,不能发生写操作2、const在函数前面,返回值不可修改
2021-10-28 15:56:18
361
原创 boost/program_options库读取控制台命令行参数
功能:解析和保存命令行参数代码:#include <iostream>using namespace std;//#include "test1.h"#include <boost/program_options.hpp>void start(int argc, char *argv[]) { try { map<string, string> ma; //存储命令行参数 //options_description:选项描述器,描述当前的程序
2021-10-27 16:48:04
243
原创 设计模式之工厂方法
理念介绍:工厂方法是一种创建设计模式,即与对象创建相关。在工厂模式中,我们在不向客户端公开创建逻辑的情况下创建对象,客户端使用相同的公共接口来创建新类型的对象。这个想法是使用一个静态成员函数(静态工厂方法)来创建和返回实例,向用户隐藏类模块的细节。工厂模式是创建对象的核心设计原则之一,它允许客户端以与库的类层次结构没有紧密耦合的方式创建库的对象。库是一些第三方提供的东西,它暴露了一些公共 API,客户端调用这些公共 API 来完成他们的任务。第二种介绍:工厂方法的意图,定义用于创建对象的接口,但
2021-10-27 10:25:42
114
原创 设计模式之单例模式
c++实现单例模式单例模式是最简单的设计模式之一。有时我们只需要类的一个实例,例如多个对象共享的单个 DB 连接,因为为每个对象创建单独的 DB 连接可能成本很高。类似地,应用程序中可以有一个配置管理器或错误管理器来处理所有问题,而不是创建多个管理器。定义:单例模式是一种将类的实例化限制为一个对象的设计模式。在c++11之前,我们写单例模式的时候会遇到一个问题,就是多种类型的单例可能需要创建多个类型的单例,主要是因为创建单例对象的构造函数无法统一,各个类型的形参不尽相同。用模块可以解决。c++实
2021-10-26 19:35:07
148
原创 c++中的模板
函数模板模板是 C++ 中一个简单但非常强大的工具。简单的想法是将数据类型作为参数传递,这样我们就不需要为不同的数据类型编写相同的代码。例如,软件公司可能需要 sort() 来处理不同的数据类型。我们可以编写一个 sort() 并将数据类型作为参数传递,而不是编写和维护多个代码。C++ 添加了两个新关键字来支持模板:‘template’ 和 ‘typename’。第二个关键字始终可以替换为关键字 “class” 。模板函数声明:template <typename 类型参数1 , typena
2021-10-26 17:00:13
74
原创 C++文件读写(ofstream、ifstream、fstream)
相关的头文件:#include 需要相关的类fstream提供三种类,实现C++对文件的操作ofstream:写操作,由ostream引申而来ifstream:读操作,由istream引申而来fstream :同时读写操作,由iostream引申而来文件的类型:文本文件 和 二进制文件文件读写的步骤:1、包含的头文件:#include 2、创建流3、打开文件(文件和流关联)4、读写 (写操作:<<,put( ), write( ) 读操作: >> , get(
2021-10-25 09:07:35
1010
原创 cmake编译添加动静态库
目录结构demo│ CMakeLists.txt│ tutorial.cxx│ TutorialConfig.h.in│└─MathFunctionsCMakeLists.txtMathFunctions.hmysqrt.cxx主要看下这两个CMakeLists.txt怎么写,其中主要代码就几行。添加动静态库MathFunctions目录下的CMakeLists.txt:#创建静态库add_library(mm STATIC mysqrt.cxx)#创建动态库add_l
2021-10-24 18:00:49
2466
原创 vscode配置详解,离线版安装插件
目录注意:路径不能有中文。环境搭建,安装MinGW用作编译器。下载vscode插件,如:C/C++,Code Runner,Native Debug 等…安装MinGW官网MinGW:https://sourceforge.net/projects/mingw-w64/files/第一个位置的安装包,第二个位置是源码,由于个人网络原因,在线下载MinGW可能失败。建议用源码版解压后配置环境。下载链接: https://pan.baidu.com/s/1z3qwttjVzzgsyc0Eq
2021-10-23 14:42:50
2029
原创 VScode离线版安装插件教程
下载插件下载插件:https://marketplace.visualstudio.com/制作下载路径格式为https://1111.gallery.vsassets.io/_apis/public/gallery/publisher/1111/extension/2222/3333/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage依次将,截图中的1位置处的字符,替换到格式中的1111处,2位置的字符替换掉格式中2222处,3位置处
2021-10-21 19:04:07
381
原创 c++ 函数回调的用法
定义和使用场合第一种描述:当程序跑起来时,一般情况下,应用程序(application program)会时常通过API调用库里所预先备好的函数。但是有些库函数(library function)却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务。这个被传入的、后又被调用的函数就称为回调函数(callback function)。在回调中,我们利用某种方式,把回调函数像参数一样传入中间函数。可以这么理解,在传入一个回调函数之前,中间函数是不完整的。换句话说,程序可以在运行时,通过登记不同的
2021-10-21 18:35:07
1329
原创 C++函数指针定义及用法
什么是函数指针:如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。指针变量定义:int(*p)(int, int);函数指针的定义方式为:函数返回值类型 (* 指针变量名) (函数参数列表);函数指针调用函数int Func(int x); /*声明一个函数*/int (*p) (int x);
2021-10-21 16:29:32
3718
原创 安装MinGW编译器
下载MinGW:https://sourceforge.net/projects/mingw-w64/files/第一个位置的安装包,第二个位置是源码,我觉得下载源码快一点。下载后配置系统环境变量:系统变量->Path->编辑->新建->D:\mingw\bin->确定系统变量->新建->变量名:LIBRARY_path->变量值:D:\mingw\lib->确定系统变量->新建->变量名:C_INCLUDE_PATH->
2021-10-20 16:12:59
296
原创 c++ explicit关键字的使用
C++中的explicit关键字只能用于修饰只有一个参数的类构造函数,它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字implicit ( 隐藏的 ) 相反,类构造函数默认情况下即声明为implicit(隐式)。explicit关键字只对有一个参数的类构造函数有效, 如果类构造函数参数大于或等于两个时, 是不会产生隐式转换的, 所以explicit关键字也就无效了。结论:只有一个参数的构造函数要使用explicit声明,防止被隐式转换成类类型。google的c++规范中提到e
2021-10-19 15:31:20
121
原创 c++中的virtual虚函数
纯虚函数virtual void fun()=0纯虚函数,这种函数在派生类中必须重写,否则该派生来也是个虚基类,而虚基类是不能定义对象的。纯虚函数是一个接口。虚函数virtual void fun()虚函数,派生类继承时可以不重写该函数纯虚函数,可以理解为接口。虚函数在C++里的作用是为了配合多态使用,也就是说,基类的指针指向派生类的对象时,我们调用的这个虚函数,实际上是当前实际的派生类对象响应(如果派生类实现了该方法)这个过程推荐看下关于面向对象的一大特性多态。...
2021-10-19 15:05:11
1117
原创 C++中json解析开源库收集,支持json5
ZPL库是一个多功能集合库,其中有 JSON5 解析器。支持注释链接: https://github.com/zpl-c/zpl#HJSONHJSON支持注释,支持多种语言。链接:https://github.com/hjson/cJSON用c写的超轻量级JSON解析器。只有一个.h和.c。链接:https://github.com/DaveGamble/cJSON...
2021-10-19 14:49:02
3881
原创 使用前置文件来尽量减少.h文件中#include的数量
我们为什么要包括头文件?问题的回答很简单,通常是我们需要获得某个类型的定义(definition)。那么接下来的问题就是,在什么情况下我们才需要类型的定义,在什么情况下我们只需要声明就足够了?问题的回答是当我们需要知道这个类型的大小或者需要知道它的函数签名的时候,我们就需要获得它的定义。1、A继承至C2、A有一个类型为C的成员变量3、A有一个类型为C的指针的成员变量4、A有一个类型为C的引用的成员变量5、A有一个类型为std::list的成员变量6、A有一个函数,它的签名中参数和返回值都是类型C
2021-10-18 15:43:06
216
原创 #ifndef的使用,防止头文件被包含多次
头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的:#ifndef <标识> #define <标识> ............ #endif 标识命名:标识的命名规则一般是头文件名全大写,前后加下划线,
2021-10-18 15:21:50
332
原创 c++ string字符串处理详情
字符串分割 char* __cdecl strtok_s( _Inout_opt_z_ char* _String, _In_z_ char const* _Delimiter, _Inout_ _Deref_prepost_opt_z_ char** _Context );参数: 1、源字符串2、分割符3、切割后剩余的字符串,例如
2021-10-13 10:42:46
198
原创 open 打不开文件,路径问题
注意:win项目这样写是可以的cmake项目这样写路径不行。解决方法:需要打开的文件,建议放在exe生成目录中。如果是跟放在程序源码同级目录,是不行的,因为打包之后就不一样了。一般都是放在appdata下或者通过exe目录级别定位...
2021-10-11 18:09:10
1223
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人