C++
文章平均质量分 67
joker D888
20级学生,喜爱linux C++ ,借用博客来记录笔记,整理记录,与大家一起分享知识。
人一辈子,没有人能打败你,只有你自己打败你自己。过去不可追,未来却可期。那么,一切就从现在开始。
展开
-
c++ %运算符
运算符%俗称“取余”或“取模”运算符,负责计算两个整数相除所得的余数。在除法运算中,如果两个运算对象的符号相同则商为正(如果不为0的话),否则商为负。C++语言的早期版本允许结果为负值的商向上或向下取整,。根据取余运算的定义,如果m和n是整数且n非0,则表达式的求值结果与m相等。隐含的意思是,如果m%n不等于0,则它的符号和m相同。C++语言的早期版本允许m%n的符号匹配n的符号,而且商向负无穷一侧取整,这一方式在新标准中已经被禁止使用了。原创 2024-02-17 15:04:20 · 814 阅读 · 0 评论 -
C/C++输出输出相关问题
3)除了scanf(“%c”),scanf有一个特性——忽略先导的空白符,只要他们连续的出现在缓冲区的开头,不管有多少个连续的空白符,scanf都会把其读走并丢弃,直到遇到非空白符,再读入有意义的字符;4)读取字符串(字符数组)的时候,比如读aaa\n,你读入字符串最后会带有\n,这个\n并不是你输入的\n,而是编译器自己添加的,你自己输入的\n还留在缓冲区中。是C/C++中的一个标准库函数,用于从标准输入(通常是键盘)读取一个字符,并返回读取的字符,如果读取失败或到达了文件尾,就返回。原创 2024-02-17 11:35:24 · 694 阅读 · 0 评论 -
C++ transform算法中toupper的使用
用到这样一个函数,将小写字符串转为大写。原创 2024-01-27 15:29:52 · 1312 阅读 · 0 评论 -
命名强制类型转换
在上面的所有形式中,e的类型必须符合以下三个条件中的任意一个:e的类型是目标e的公有派生类、e的类型是目标tpe的公有基类或者e的类型就是目标bpe的类型。也就是说,强制转换的结果将与原始的地址值相等,因此我们必须确保转换后所得的类型就是指针所指的类型。通常为运算对象的位模式提供较低层次上的重新解释,用于进行底层的、不安全的类型转换,通常用于指针或引用之间的转换,以及整数和指针之间的转换。主要用于编译时的类型转换,它通常用于类层次结构中的相关类型、基本数据类型之间的转换以及一些隐式类型转换的显式表示。原创 2024-01-25 23:01:07 · 764 阅读 · 0 评论 -
priority_queue比较规则
在C++中,的默认行为是生成大根堆。如果想要生成小根堆,可以使用构造函数的第三个参数,传入一个自定义的比较函数。对于类型为然后在定义//我们定义了一个小根堆,堆的元素是pair类型的,使用自定义的比较函数cmp对元素进行排序。// 当然也可以使用lambda。原创 2024-01-11 15:11:50 · 490 阅读 · 0 评论 -
MySQL C API的使用
MySQL C API(也称为 MySQL Connector/C)是用于与 MySQL 数据库交互的 C 语言 API。它提供了一组函数和结构体,允许你在 C 程序中连接到 MySQL 数据库服务器,并执行查询、插入、更新等数据库操作。原创 2024-01-08 14:27:38 · 744 阅读 · 2 评论 -
ctemplate的使用
CTemplate是一种简单但功能强大的模板引擎,它是Google制作的一个开源C++库,广泛用于各种HTML模板解析和生成。CTemplate的主要优点是简单和灵活。它将模板和逻辑分开,使得页面布局和细节(HTML)与控制流、条件等逻辑分离,使软件的维护和修改变得更容易。:模板文件是普通的文件,比如一个HTML文件。在你想插入变量的地方使用的形式。例如,在一个HTML模板中,你可以写</</:首先,你需要创建一个的实例,并为其添加变量。:最后,你可以将填充了数据的对象和模板文件放入。原创 2024-01-08 13:57:52 · 521 阅读 · 0 评论 -
静态库和动态库的生成和编译
静态库和动态库是两种不同的代码库,它们之间的区别主要在于如何链接和加载代码。静态库是一组目标文件(Object File)的集合,它们被打包成一个单独的文件。在编译时,静态库的代码被复制到可执行文件中,使得可执行文件包含了所有需要的代码。因此,静态库在链接时会增加可执行文件的大小,但是可以避免对库的依赖性。每次修改静态库的源代码,都需要重新编译整个可执行文件。动态库也是一组目标文件的集合,但是它们被打包成一个单独的共享库文件,扩展名为.so(Linux) 或 .dll(Windows)。原创 2023-02-22 22:20:30 · 768 阅读 · 0 评论 -
java中的接口用C++怎么理解
看设计模式时,书中以java举例,其中使用了java的接口,但本人却是C++选手,对java也不了解,故此文来学习理解。原创 2023-02-18 14:30:00 · 296 阅读 · 0 评论 -
C++ MySQL Error 1366 incorrect string value引发的认识
在使用MySQL C++ API编写程序时,由于用到了中文,导致出现了MySQL error 1366 incorrect string value 问题,但令我同样不解的是我用同样的语句在cmd下可以正常执行。(MySQK1366 报错如下如下:虽然可以很容易发现时字符集编码的问题,也确实是这个问题,这也是第一次编写程序遇到,虽然找问题解决方法很痛苦,但对字符集编码以及跨平台有了更深的了解。原创 2022-12-11 08:15:00 · 635 阅读 · 0 评论 -
关于整数原反补的一些认识
计算机中存储的数据都是以补码的形式存储的,计算机中的整数有无符号数和有符号数之分。最常见的有符号数的计算机表示方式就是补码形式,其次还有原码和反码两种表示形式,之所以会有不同的表示形式,是由于各自的解释方式不同。无符号数只有唯一的解释方法。因为正数按照上述的表示方法形成的二进制结果都相同,所以称正数的原反补相同,并不是特殊规定。如果你疑惑正数的原反补为什么相同,那大概你会查到“规定正数的原反补相同”这样的字眼。但其实只要了解原反补码的表示方法就一目了然了。所以为什么计算机要采用补码呢?原创 2022-09-30 08:00:00 · 240 阅读 · 3 评论 -
C++ 查找指定目录下的文件数
C++ 查找指定目录下的文件数代码#include<iostream>using namespace std;#include <filesystem>#include <string>using namespace std::filesystem;// 注意这个函数也会统计隐藏文件int getFileNumber(string folderPath) { if (!exists(folderPath)) // 如果目录不存在原创 2022-05-19 10:31:49 · 2738 阅读 · 3 评论 -
C++ 批量修改文件名
C++ 批量修改文件名前言在网上下一些学习资料,可是每个文件后带有一些其他无关的文字,形式如,某某某【某某某】.mp4,其中【】及其内容皆为无关内容,本文代码程序用于批量删除每个MP4文件后的【某某某】。注意文件名即为中文字符,不同于英文格式,所以以下代码中在需要的时候都使用了宽字符处理。代码#include <iostream>#include <string>#include <vector>#include <io.h>int mai原创 2022-05-09 16:47:39 · 2628 阅读 · 2 评论 -
二级指针及函数传参和形参问题
二级指针及函数传参和形参问题问题描述在帮助解决小伙伴的问题中,发现对二级指针的理解更上一层,其问题为自建链表的初始化失败,简单描述如下typedef struct LNode { int data; struct LNode* next;}LNode, * LinkList;//初始化单链表 (LinkList是指针类型)void InitList_L(LinkList L1){ L1 = (LinkList)malloc(sizeof(LNode)); L1->next = N原创 2022-03-19 19:26:52 · 1122 阅读 · 4 评论 -
【c++】头文件互相包含问题
头文件相互包含转载 2022-02-02 16:50:14 · 427 阅读 · 0 评论 -
为何string调用swap导致迭代器失效
为何string调用swap导致迭代器失效前言swap操作交换两个相同类型的容器的内容,一般的容器(除array外),交换两个容器内容的操作会保证非常快,因为并没有交换元素本身,而只是交换了两个容器的内部数据结构(string不一定)。注:这里交换两个容器的内部数据结构是指交换容器中各元素的内存地址,并不是交换各个元素变量所存储的值。除string外,swap使用之后指向容器的指针、引用和迭代器均有效(即开始指向那个元素,在swap之后这个指针、引用和迭代器依然指向该元素)。除array外,swa原创 2022-01-11 13:17:02 · 1130 阅读 · 0 评论 -
scanf(%d),连续输入数字和字符(一条无空格字符串)
scanf(%d),连续输入数字和字符(一条无空格字符串)scanf("%d"),如果缓存区的开始是数字,scanf会读入,直到遇见非数字字符,否则不会读入#include<iostream>using namespace std;int main(){ int a[100]; char c[100]; for (int i = 0; i < 5; ++i) { //一次输入1a2b3c4d5e,scanf(%d)只有一开始遇见数字才能把数字读走,%d会读入数字,直到遇见字原创 2021-12-08 15:36:53 · 2702 阅读 · 0 评论 -
二维数组传参,用int指针接收
二维数组传参,用int*接收前言//我们直到二维数组的数组名是一个地址,等于arr[0][0],即通过值来看,arr=&arr[0][0]//而下方的Print函数调用,传递的参数却是&arr[0][0],疑问来了,直接传数组名可以吗?(一维数组可以)#include<stdio.h>void Print(int* arr) { for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) {原创 2021-12-01 23:11:19 · 972 阅读 · 0 评论 -
“非常量引用的初始值必须为左值“及“匿名对象“
“非常量引用的初始值必须为左值"及"匿名对象”前言在练习的时候用引用接收匿名对象引发”非常量引用的初始值必须为左值“错误简单还原如下#include<iostream>using namespace std;class Maker {public: Maker() { cout << "Maker的构造" << endl; } Maker(const Maker& m) { cout << "Maker的拷贝构造" &原创 2021-11-26 10:45:19 · 846 阅读 · 2 评论 -
“异常对象的生命周期”及“匿名对象抛出和引用接收的最优操作”
“异常对象的生命周期”及“匿名对象抛出和引用接收的最优操作”主题讨论异常中对象的生命周期,以及最优的异常接受方式#include<iostream>using namespace std;class Maker {public: Maker() { cout << "Maker的构造" << endl; } Maker(const Maker& m) { cout << "Maker的拷贝构造" << endl原创 2021-11-25 21:13:09 · 404 阅读 · 0 评论 -
scanf(“%d\n“)多余输入问题及\n的读入问题
scanf("%d\n")多余输入问题及\n的读入问题前言原问题是想在输入数字后把缓冲区的\n也读走,以方便后续的字符串输入工作,而这样想要scanf("%d\n")直接读走\n引发的问题引起了我的思考,虽然知道这样做不行,但想要之所以然,于是此博文诞生,问题简化如下。#include<stdio.h>int main(void){ int a; scanf("%d\n", &a); return 0;}//比如输入1\n2\n后程序方可结束一个简单的输入问题,本原创 2021-10-25 15:45:23 · 3012 阅读 · 3 评论 -
继承+组合关系下的构造和析构
继承+组合关系下的构造和析构理解Inheritance(继承)+Composition(组合)关系下的构造和析构顺序,有利于我们深入理解C++的内存布局。先看第一种情况子类继承父类又与普通类进行组合,可以用代码举例找出答案,各位博友们可以直接复制代码到编译器下运行。#include<iostream>using namespace std;//父类class Base { public: Base() { cout << "Base::构造" <<原创 2021-10-05 10:19:35 · 385 阅读 · 11 评论 -
【C++】04_模板初阶
【C++】04_模板初阶01.泛型编程与模板1.1泛型编程如何实现一个通用的交换函数呢?void Swap(int& left, int& right){ int temp = left; left = right; right = temp;}void Swap(double& left, double& right){ double temp = left; left = right; right原创 2021-09-26 20:08:45 · 111 阅读 · 0 评论 -
【C++】03_内存管理
【C++】03_内存管理文章目录【C++】03_内存管理01.C/C++内存分布02.C语言中动态内存管理方式2.1 malloc/calloc/realloc和free03. C++内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型04. operator new与operator delete函数(重点)4.1 operator new与operator delete函数(重点)4.2 operator new与operator delete的类专属重载(了原创 2021-09-25 18:30:38 · 176 阅读 · 0 评论 -
大端模式小端模式详解(不懂你打我,略略~~)
大端模式小端模式简解(不懂你打我,略略~~)先看概念大端模式(Big-Endian),是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。小端模式(Little-Endian),是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。先看两者概念中粗体字后面原创 2021-09-24 19:36:17 · 4877 阅读 · 0 评论 -
【C++】02_类与对象(下)
文章目录【C++】02_类与对象(下)01.再谈构造函数1.1构造函数体内赋值1.2初始化列表1.3 explicit关键字02.static成员2.1概念2.2特性03.C++11 的成员初始化新玩法04.友元4.1友元函数4.2友元类05.内部类5.1概念及特性【C++】02_类与对象(下)01.再谈构造函数1.1构造函数体内赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。class Date{public: Date(int year, int原创 2021-09-21 21:31:33 · 102 阅读 · 0 评论 -
【C++】02_类与对象(中)
文章目录【C++】02_类与对象(中)01.类的默认成员函数02.构造函数2.1 概念2.2 特性2.3构造函数的调用3.析构函数3.1 概念3.2 特性3.3 类对象作为类成员4.拷贝构造函数4.1 概念4.2 特征5.赋值运算符重载5.1 运算符重载5.2 赋值运算符重载6.const成员6.1 const修饰类的成员函数7.取地址及const取地址操作符重载【C++】02_类与对象(中)01.类的默认成员函数 如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我原创 2021-09-19 20:06:23 · 122 阅读 · 0 评论 -
补码100000000,原反补的那些事儿!
补码100000000为什么是-128?前言: 大家知道计算机底层都是通过补码做的运算,而无论表面是加减乘除还是其他一些运算,底层做的都是加法。原因就不详细展开了,主要是因为这样计算机的运算设计更加简单,而且一切的运算都可以以加法运算为基础。原,反,补正数原码,反码,补码相同,而负数的补码是在原码保留最高位符号1位同时对其余各位取反再**+1**而得,即补码取反加一。而负数的补码求原码,则是求补码的补码,补码取反加一,即符号位不动,其余各位取反后再+1。(或补码减一取反)问题:char a原创 2021-09-11 13:04:05 · 972 阅读 · 5 评论 -
【C++】02_类与对象(上)
文章目录【C++】02_类与对象(上)01.面向过程和面向对象初步认识02.类的引入03.类的定义04.类的访问限定符及封装4.1 访问限定符4.2 封装05.类的作用域06.类的实例化07.类对象模型7.1 如何计算类对象的大小7.2 类对象的存储方式猜测7.3 结构体内存对齐规则08.this指针8.1 this指针的引出8.2 this指针的特性【C++】02_类与对象(上)01.面向过程和面向对象初步认识C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C+原创 2021-09-09 20:53:47 · 108 阅读 · 0 评论 -
【C++】01_入门小知识(2)
【C++】01_入门小知识(2)07.引用7.1引用的概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。比如,你可能有个小名,或者绰号,但都指的是你本身,引用与此意思类似。语法:类型& 引用变量名(对象名) = 引用实体;void TestRef(){ int a = 10; int& ra = a;//<====定义引用类型 printf("%p\n", &原创 2021-09-07 20:53:11 · 85 阅读 · 0 评论 -
【C++】01_入门小知识(1)
【C++】01_入门小知识(1)前言:在具有C语言知识的基础上,先来了解下C++的一些知识点。01.C++关键字????:看个大概就行,混个眼熟,后续会进行深入学习。ISO C++98/03关键字共63个,此处严格按标准原文排版:asmdoifreturntypedefautodoubleinlineshorttypeidbooldynamic_castintsignedtypenamebreakelselongsizeofunion原创 2021-09-06 15:58:36 · 97 阅读 · 0 评论 -
【c++】00_初识C++
【c++】00_初识C++C和C++ C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。 为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。 1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++原创 2021-09-03 18:52:40 · 131 阅读 · 0 评论 -
【STL】push 和 emplace区别
【STL】push 和 emplace区别相信大家都知道push的作用,对数据进行插入;往常大家都是怎么用push的呢?对于内置数据类型大家是不是这样:这里以stack来举例stack<int> s1;s1.push(1);//直接插入数据int a=2;s1.push(a);//变量a插入,这两种操作对于内置数据类型都可以那么如果插入的数据类型是自定义数据类型呢?class Person{ public: int m_age; string m_nam原创 2021-08-16 16:31:40 · 3754 阅读 · 3 评论 -
GCC,gcc,g++关系
GCC,gcc,g++关系GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等。)即当下的 GCC 编译器还支持编译 Go、Objective-C,Objective-C ++,Fortran, Java,Ada,D 和 BRIG(HSAIL)等程序,gcc是GCC中的GUN C C原创 2021-08-13 13:55:50 · 507 阅读 · 0 评论 -
【C/C++】 __gcd()无法使用问题
【C/C++】 __gcd()无法使用问题在VS2019下,本想使用__gcd()函数,没想到却报错,如下于是去查看C++标准库,发现没有这个函数。最后得知,这个函数是GNU的私货,在Linux下的编译器可用。不懂GNU的小伙伴去搜一下。所以小伙伴遇到这个问题就知道怎么回事了吧。...原创 2021-08-13 13:21:41 · 3550 阅读 · 2 评论 -
职工信息管理系统终极版(C++实现)
文章目录基于多态的职工管理系统功能实现:1.系统以菜单方式与按键输入进行交互工作;2.职工信息添加功能:(1)单个录入; (2)批量录入。3.职工信息删除功能:(1)按编号删除; (2)按姓名删除。4.职工信息查找功能:(1)按编号查找; (2)按姓名查找。5.职工信息修改功能:(1)单项信息修改; (2)全项信息修改。6.职工信息排序功能:(1)升序; (2)降序。7.清除数据、显示全部职工信息功能。worker.h内容worker.cpp内容WorkerManager.h内容职工管理系统.cpp内容原创 2021-08-02 16:54:12 · 3034 阅读 · 0 评论 -
C++之binary_search二分查找算法
C++之binary_search二分查找算法功能:查找指定元素是否存在,查到返回true 否则false。函数原型:bool binary_search(iterator beg, iterator end, value);解释:beg 开始迭代器 end 结束迭代器 value 查找的元素。注意????????:在无序序列中不可用,且默认可用状态是升序,若要对降序数据使用binary_search算法,则要自己定义排序规则。使用案例:升序情况(默认状态)调用于函数test01(原创 2021-07-31 21:28:55 · 543 阅读 · 0 评论 -
C++中虚析构函数的作用及原理
虚析构函数有啥用?先测测你哟,上代码????:#include<iostream>using namespace std;class Base //父类(基类){public: Base() { cout << "Base构造函数!" << endl; } ~Base() { cout << "Base析构函数!" << endl; }};class Son : public Base //子类(派生类){原创 2021-07-18 11:15:57 · 911 阅读 · 0 评论 -
C语言程序的编译+链接
程序的翻译环境和执行环境在ANSI C的任何一种实现中,都存在两种不同的环境:翻译环境:在这个环境中源代码被转化为可实行的机器指令(即二进制编码形式);执行环境:此环境用于实际执行代码。编译+链接详解编译环境分为编译(编译器)和链接(链接器),编译又分为预编译、编译和汇编;每个源文件(.c)都会通过编译过程转化为目标文件(.obj);每个目标文件有链接器捆绑在一起,形成一个单一而完整的可执行文件(.exe);链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人原创 2021-06-05 13:29:28 · 159 阅读 · 1 评论 -
被淘汰的gets及其安全版本fgets
请抛弃gets(),使用更安全的fgets()!!前言:可能你在做某些OJ时会发现,当你使用gets()时,编译器可能会出现如下提示:(来自于PTA,编译器:gcc,编译器版本:6.5.0)警告:“get”已被弃用。那么get究竟犯了多大的错呢,以致于被舍弃?因为gets()在读到’\n’或者流末尾的时候才会停下来,把数据写入s指向的缓冲区,然后返回。它并不理会缓冲区的大小。如果缓冲区只有32字节,当前读到的行多于32个字符时,就会溢出缓冲区边界,带来错误,甚至危险。 有统计表明,8原创 2021-05-19 20:10:42 · 1049 阅读 · 0 评论