![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++
C++
两只鱼丿
学无止境
展开
-
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 · 618 阅读 · 0 评论 -
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 · 3775 阅读 · 0 评论 -
VSCode运行调试+解决控制台中文乱码
vscode编译运行+调试,解决终端输出中文乱码问题原创 2021-12-29 15:48:44 · 1267 阅读 · 0 评论 -
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 · 1442 阅读 · 0 评论 -
boost库常用功能记录
目录:boost::archive::binary_iarchive:序列化boost::timer:时间高精度,毫秒级单元测试,宏 BOOST_AUTO_TEST_CASEboost中的logboost::archive::binary_iarchive:序列化功能:把类的一个对象保存到文件中或者通过网络发出去时,可以把这个对象序列化,得到一个二进制字节流,或者XML格式表示等等。这样就可以保存这个对象到文件中或者通过网络发出去了。把序列化的数据进行反序列化,可以得到一个CCar对象。链接:htt原创 2021-10-29 15:57:07 · 727 阅读 · 0 评论 -
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 · 244 阅读 · 0 评论 -
const修饰函数的作用
1、const在函数名后面表示是常成员函数,该函数不能修改对象内的任何成员,只能发生读操作,不能发生写操作2、const在函数前面,返回值不可修改原创 2021-10-28 15:56:18 · 349 阅读 · 0 评论 -
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 · 232 阅读 · 0 评论 -
csdn画流程图
Created with Raphaël 2.3.0开始 /*定义st为start类型的节点,上面写“开始”*/输入aa++原创 2021-10-27 16:11:58 · 1095 阅读 · 0 评论 -
设计模式之工厂方法
理念介绍:工厂方法是一种创建设计模式,即与对象创建相关。在工厂模式中,我们在不向客户端公开创建逻辑的情况下创建对象,客户端使用相同的公共接口来创建新类型的对象。这个想法是使用一个静态成员函数(静态工厂方法)来创建和返回实例,向用户隐藏类模块的细节。工厂模式是创建对象的核心设计原则之一,它允许客户端以与库的类层次结构没有紧密耦合的方式创建库的对象。库是一些第三方提供的东西,它暴露了一些公共 API,客户端调用这些公共 API 来完成他们的任务。第二种介绍:工厂方法的意图,定义用于创建对象的接口,但原创 2021-10-27 10:25:42 · 106 阅读 · 0 评论 -
设计模式之单例模式
c++实现单例模式单例模式是最简单的设计模式之一。有时我们只需要类的一个实例,例如多个对象共享的单个 DB 连接,因为为每个对象创建单独的 DB 连接可能成本很高。类似地,应用程序中可以有一个配置管理器或错误管理器来处理所有问题,而不是创建多个管理器。定义:单例模式是一种将类的实例化限制为一个对象的设计模式。在c++11之前,我们写单例模式的时候会遇到一个问题,就是多种类型的单例可能需要创建多个类型的单例,主要是因为创建单例对象的构造函数无法统一,各个类型的形参不尽相同。用模块可以解决。c++实原创 2021-10-26 19:35:07 · 136 阅读 · 0 评论 -
c++中的模板
函数模板模板是 C++ 中一个简单但非常强大的工具。简单的想法是将数据类型作为参数传递,这样我们就不需要为不同的数据类型编写相同的代码。例如,软件公司可能需要 sort() 来处理不同的数据类型。我们可以编写一个 sort() 并将数据类型作为参数传递,而不是编写和维护多个代码。C++ 添加了两个新关键字来支持模板:‘template’ 和 ‘typename’。第二个关键字始终可以替换为关键字 “class” 。模板函数声明:template <typename 类型参数1 , typena原创 2021-10-26 17:00:13 · 64 阅读 · 0 评论 -
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 · 1000 阅读 · 0 评论 -
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 · 1907 阅读 · 0 评论 -
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 · 362 阅读 · 0 评论 -
c++ 函数回调的用法
定义和使用场合第一种描述:当程序跑起来时,一般情况下,应用程序(application program)会时常通过API调用库里所预先备好的函数。但是有些库函数(library function)却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务。这个被传入的、后又被调用的函数就称为回调函数(callback function)。在回调中,我们利用某种方式,把回调函数像参数一样传入中间函数。可以这么理解,在传入一个回调函数之前,中间函数是不完整的。换句话说,程序可以在运行时,通过登记不同的原创 2021-10-21 18:35:07 · 1321 阅读 · 0 评论 -
C++函数指针定义及用法
什么是函数指针:如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。指针变量定义:int(*p)(int, int);函数指针的定义方式为:函数返回值类型 (* 指针变量名) (函数参数列表);函数指针调用函数int Func(int x); /*声明一个函数*/int (*p) (int x);原创 2021-10-21 16:29:32 · 3692 阅读 · 0 评论 -
安装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 · 288 阅读 · 0 评论 -
c++ explicit关键字的使用
C++中的explicit关键字只能用于修饰只有一个参数的类构造函数,它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字implicit ( 隐藏的 ) 相反,类构造函数默认情况下即声明为implicit(隐式)。explicit关键字只对有一个参数的类构造函数有效, 如果类构造函数参数大于或等于两个时, 是不会产生隐式转换的, 所以explicit关键字也就无效了。结论:只有一个参数的构造函数要使用explicit声明,防止被隐式转换成类类型。google的c++规范中提到e原创 2021-10-19 15:31:20 · 115 阅读 · 0 评论 -
c++中的virtual虚函数
纯虚函数virtual void fun()=0纯虚函数,这种函数在派生类中必须重写,否则该派生来也是个虚基类,而虚基类是不能定义对象的。纯虚函数是一个接口。虚函数virtual void fun()虚函数,派生类继承时可以不重写该函数纯虚函数,可以理解为接口。虚函数在C++里的作用是为了配合多态使用,也就是说,基类的指针指向派生类的对象时,我们调用的这个虚函数,实际上是当前实际的派生类对象响应(如果派生类实现了该方法)这个过程推荐看下关于面向对象的一大特性多态。...原创 2021-10-19 15:05:11 · 1089 阅读 · 0 评论 -
#ifndef的使用,防止头文件被包含多次
头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的:#ifndef <标识> #define <标识> ............ #endif 标识命名:标识的命名规则一般是头文件名全大写,前后加下划线,原创 2021-10-18 15:21:50 · 314 阅读 · 0 评论 -
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 · 189 阅读 · 0 评论 -
open 打不开文件,路径问题
注意:win项目这样写是可以的cmake项目这样写路径不行。解决方法:需要打开的文件,建议放在exe生成目录中。如果是跟放在程序源码同级目录,是不行的,因为打包之后就不一样了。一般都是放在appdata下或者通过exe目录级别定位...原创 2021-10-11 18:09:10 · 1171 阅读 · 0 评论 -
Vcpkg详细使用
使用vcpkg管理c++库安装vcpkg1.1 下载vcpkggit clone https://github.com/Microsoft/vcpkg.gitcd vcpkg1.2 在Powershell下运行批处理PS> .\bootstrap-vcpkg.bat1.3 集成到系统中,这样新建的C++工程就可以直接使用已安装的库了PS> .\vcpkg integrate install使用vcpkg2.1 列出当前已安装的库.\vcpkg list2.2 查询原创 2021-10-09 10:22:30 · 717 阅读 · 0 评论 -
c++操作excel的几种库
OpenXLSX链接https://github.com/troldal/OpenXLSX:OpenXLSX 是一个 C++ 库,用于读取、写入、创建和修改 Microsoft Excel® 文件,采用 .xlsx 格式。兼容性:libxlsxwriter链接:https://github.com/jmcnamara/libxlsxwriterLibxlsxwriter 是一个 C 库,可用于在 Excel 2007+ XLSX 文件中写入文本、数字、公式和指向多个工作表的超链接。它支持以下原创 2021-10-08 11:30:44 · 22825 阅读 · 2 评论 -
衡量算法执行效率,大 O 表示法
使用大 O 表示法衡量某个算法的复杂度,其实就是将该算法的运行时间用输入量为 n 的函数表示出来。这里的输入量 n 在 STL 中通常指的是算法操作的元素个数。举个例子,当算法运行时间随元素个数成线性增长时(即如果元素个数呈倍数增长,运行时间也呈倍数增长),该算法的复杂度用 O(n) 来表示;反之,如果算法的运行时间和输入量 n 无关,则该算法的复杂度就用 O(1) 来表示。 常见的算法复杂度表示算法复杂度种类含意大 O 表示法常数阶算法运行时间原创 2021-10-05 16:07:24 · 395 阅读 · 0 评论 -
string 以空格切割数据
istringstream s("ff kkk erere geoir"); //原始数据 string f; while (s>>f) { cout << f << endl; //以空格分割后的数据 }原创 2021-10-04 13:52:06 · 501 阅读 · 0 评论 -
回调函数是什么,如何使用以及函数的注册
回调函数就是对函数指针的应用。定义一个函数指针:void (*a) (int b); //定义一个函数指针aa是一个函数指针,既然是函数指针就可以把其它函数的地址赋值给a,如下:int c (char c1); int c2 (char c2); int c3 (char c3); //任意普通函数a = c; a=c2; a=c3; //函数注册 把函数c,c2,c3,赋值给函数指针a的操作就是函数注册,就是一个指针赋值应用而已。void f (int原创 2021-08-26 12:07:32 · 1695 阅读 · 2 评论 -
C++中结构与类的相同与区别
在C++中,结构与类相同,但也有一些区别。其中最重要的是安全性,下面对差异要点进行阐述:默认情况下,类的成员是私有的,而结构体成员是共有的。例如,程序1编译失败,程序2正常。//程序1#include <stdio.h> class Test { int x; // x is private }; int main() { Test t; t....原创 2020-04-08 14:51:31 · 290 阅读 · 0 评论 -
C和C++结构struct之间的区别
在C++中,struct和class完全相同,除了struct默认为public和class默认为privacyC和C++结构之间的一些重要区别:结构内部的成员函数:C中结构内部不能有成员函数,C++可以C结构中不能直接初始化成员,C++中可以C++中声明结构变量时,不一定需要在前面加上struct关键字C结构不能具有静态成员,C++可以C结构中体中不能创建构造函数,C++可以,如下...原创 2020-04-08 14:32:10 · 213 阅读 · 0 评论 -
结构体成员对齐,填充和数据打包
数据对齐,结构打包和填充是什么意思?原创 2020-04-08 14:05:53 · 216 阅读 · 0 评论 -
C中如何创建和使用结构体,结构体的局限性
什么是结构体?结构体是C/C++中用户自定义的数据类型,结构体创建一个数据类型,该数据类型可以将不同的类型集合为单个类型。如何创建结构体?struct 关键字用于创建结构体,示例:struct address{ char name[20]; int i; char state[10];};如何声明结构体变量?可以直接用结构体来声明,也可以像基本类型一样来单独声明结构体变量。...原创 2020-04-07 20:25:51 · 590 阅读 · 0 评论 -
C++中的纯虚析构函数
什么是纯虚函数纯虚函数比较特殊,在许多情况下,在基类中不能对虚函数给出有意义的实现,而是把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。在C++中析构函数可以是纯虚的记住最重要的事情之一,如果类包含纯虚析构函数,则必须为纯虚析构函数提供函数体。为什么需要函数体呢?原因是因为析构函数(与其它函数不同)实际上并未被 “重写”,而是始终以派生类的相反顺序调用它们。这意味...原创 2020-04-03 11:30:11 · 2541 阅读 · 0 评论 -
C++中析构函数与常规函数的区别,是否可以为虚析构函数
什么是析构函数?析构函数是一个销毁或删除对象的成员函数。什么时候调用析构函数?当对象超出范围时,将自动调用析构函数:函数结束程序结束包含局部变量的块结束调用delete运算符析构函数与常规成员函数的区别?析构函数以波浪号(~)开头,与类名相同。析构函数不接受任何参数,也不返回任何值。#include <iostream>using std::cout;cl...原创 2020-04-03 10:20:27 · 236 阅读 · 0 评论 -
C++中复制构造函数何时调用?什么时候需要自定义副本构造函数
什么是复制构造函数?复制构造函数是一个成员函数,它使用同一个类的另一个对象初始化一个对象。函数原型如下:ClassName(const ClassName &old_obj);下面是一个复制构造函数的简单示例:#include <iostream>using std::cout;class Point {private: int x, y;publi...原创 2020-04-02 19:59:55 · 1888 阅读 · 0 评论 -
C++构造函数与普通成员函数,构造函数重载
什么是构造函数构造函数是类的成员函数,用于初始化类的对象。在C++中,创建对象(类的实例)时会自动调用构造函数。它是类的特殊成员函数。构造函数与普通成员函数有何不同?在以下方面有所不同:构造函数与类本身具有相同的名称构造函数没有返回类型创建对象时会自动调用构造函数如果我们未指定构造函数,则C++会自动生成一个默认构造函数(不带参数,并且是空主体)。构造函数的类型1、默认构造...原创 2020-04-02 16:00:49 · 947 阅读 · 0 评论 -
C++类的创建和对象,成员函数与内联函数
类C++中的类是构建块,可导致面向对象的编程。它是用户定义的数据类型,拥有自己的数据成员和函数,可以通过类的实例来访问和使用它们。C++类就像对象的蓝图。例如:汽车类别,有许多不同品牌的汽车,但它们都有一些共同的属性,例如4个车轮、速度限制、里程范围等。因此,这里汽车是类别,车轮、速度限制和里程范围是属性。 1、类是用户定义的数据类型,具有数据成员和成员函数 2、数据成员是数据变量,成...原创 2020-04-02 10:42:06 · 592 阅读 · 0 评论 -
C++用户自定义的数据类型
用户自定义的数据类型包括:类结构体Union(共用体)枚举Typedef定义的类型类面向对象编程的C++构建块是class,它是用户定义的数据类型,拥有自己的数据成员和成员函数,可以通过创建该类的实例来访问和使用它们。 类就像对象的蓝图。语法例:#include <iostream>using std::cout;using std::string;c...原创 2020-04-01 19:03:19 · 3024 阅读 · 0 评论 -
c++的3种数据类型,原始、派生和自定义
数据类型用于告诉变量它可以存储的数据类型,只要在C++中定义了变量,编译器就根据该变量的数据类型为该变量分配相应的内存。C++数据类型主要分为3种:1 . 原始数据类型: 这些数据类型是内置或预定义的数据类型,用户可以直接使用它们声明变量。例如:int,char,float,bool等。C++中可以用的原始数据类型为:整数、字符、布尔型、浮点、双浮点数、void、宽字符2 . 派生...原创 2020-04-01 15:54:40 · 1478 阅读 · 0 评论 -
编写第一个C++程序:Hello World
第一个程序实现在屏幕上显示 “Hello World”,代码如下:#include <iostream>using namespace std; //导入所有命名空间int main(){ std::cout << "Hello World!\n"; std::string; //使用命名空间中的string return 0;}输出结...原创 2020-04-01 11:16:55 · 1467 阅读 · 0 评论