C\Cpp
文章平均质量分 86
学习c\cpp
木心
I seek not to know the answer, but to understand the questions.
欢迎访问我的个人Blog-->
https://shenmuxin.github.io
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++中的std::allocator
来分配内存,而是在给定的内存地址上直接调用构造函数,最后返回传入的指针(将指针类型转换为目标类型)。placement new 是C++中一种特使的内存分配的对象构造机制,它允许在已分配的内存上直接构造对象,而不是通过传统的。乍一看,这个placement new的实现什么都没干,是如何完成对象的构造呢?的标准来实现的,甚至很多开源的内存储项目可以和大多数STL容器兼容,在很多场景下,内存池是。默默工作在C++STL中的所有容器的内存分配上,很多内存池是按照。是C++的内存分配原语,默认调用C语言中的。原创 2025-05-12 17:58:17 · 1063 阅读 · 0 评论 -
windows环境中安装make
在windows中安装make只需要三步。原创 2024-10-31 19:59:09 · 4787 阅读 · 0 评论 -
cpp中容器push_back和emplace_back的区别
没有创建临时对象,也不需要调用拷贝或移动构造函数。只会调用一次有参构造函数,性能上更优。时会先调用类的有参构造函数创建一个临时变量,再将这个元素拷贝或者移动到容器之中,而。只能用于直接在容器中构造新元素的情况,如果要将现有的对象添加到容器中则需要使用。调用构造函数构造对象,避免临时对象的创建和拷贝或移动。:会先构造一个临时对象(调用有参构造函数),然后将其。(调用有参构造函数)。添加到容器中(拷贝或移动)。,避免额外的拷贝或移动构造。:如果你有现有的对象,像。,导致了额外的对象拷贝。原创 2024-10-16 09:43:45 · 1592 阅读 · 0 评论 -
关于cpp的lambda匿名函数那些事
熟悉python的同学都知道,python中存在lambda匿名函数,这种函数往往只能完成简单的功能,常用于内嵌函数:如map()filter()sorted()等高阶函数。中的匿名函数(也称为lambda表达式)是一种可以定义的方式,它不需要显式地命名函数名称。匿名函数常用于需要传递简单函数的场景,例如回调、算法或事件处理程序。C++从C++11开始引入了 lambda表达式,并在后续版本中不断增强其功能。原创 2024-10-15 10:35:21 · 1256 阅读 · 0 评论 -
Awesome C指针详解
它的主要作用是能够动态地调用不同的函数,这为程序设计提供了极大的灵活性。指针进行加减时,需要将整数乘以指针类型对于的字节长度,这样指针才能正确找打其应该所在的位置。这里列举了一些比较复杂的指针的例子,可以多多揣摩,孰能生巧。指针本身是一个地址,在32位机器中占4个字节,在64位机器中占8个字节。时,表示取了整个数组的地址,类型是一种数组指针。),表示你获取了整个数组的地址,而不是某个具体元素的地址。)时,它通常会被转换为指向数组第一个元素的指针,类型是。时,表示取了整个数组的地址,类型是一种数组指针。原创 2024-09-13 10:30:28 · 1321 阅读 · 0 评论 -
cpp实现字符串八股strcpy()、strlen()、strcat()、strcmp()
开始的地址空间内,返回值的类型为。结束符的字符串复制到以。所指向的字符串添加到。原创 2024-08-30 12:37:58 · 436 阅读 · 0 评论 -
C++中的优先级队列priority_queue和双端队列deque用法详解
deque 是双端队列(Double-Ended Queue),支持在两端进行高效的插入和删除操作。与 std::vector 类似,它也提供了随机访问功能,但与 vector 不同的是,deque 可以在头部和尾部都进行高效的插入和删除。,优先级队列priority_queue的使用和普通的队列非常类似,只不过优先级队列的底层实现是Heap能够对队列中的元素进行排序,我们可以让大的元素排在前面或者让小的元素排在前面。使用优先级队列需要包含头文件。原创 2024-08-27 22:44:00 · 1081 阅读 · 0 评论 -
C++中的强制类型转换关键字static_cast、dynamic_cast、reinterpret_cast和const_cast
是一种低级的、危险的转换,它可以将一种类型的指针直接转换为另一种不相关类型的指针,或者将指针转换为整数,反之亦然。用于在继承关系中进行安全的向下转换(从基类转换为派生类)。在 C++ 中,类型转换是指将一种类型的数据转换为另一种类型的数据。注意:reinterpret_cast 可能导致未定义行为,应谨慎使用,通常不推荐在一般应用程序中使用它。这些操作符比 C 风格的强制类型转换更安全和可控,提供了更精确的转换语义。限定符,但它也可以用于向对象添加这些限定符。限定的对象的值时,去掉。原创 2024-08-26 19:05:21 · 1185 阅读 · 0 评论 -
C/C++前置声明
C语言中,结构体类型在声明之后,未正式定义之前是一个不完全类型(incomplete type),即只知道其是一个类型,但不知道包含哪些成员。不完全类型只能用于定义指向该类型的指针,或声明使用该类型作为形参指针类型或返回指针类型的函数。需要注意的是,在使用前置声明的时候,我们只能定义为指针,因为前置声明只是告诉编译器有这种类型,并没有给出具体的定义,所以当我们进行实例化的时候,需要为其分配内存空间,由于还不知道类型大小,这样一样会报错,使用指针就能避免这个问题。的完整定义,这样编译器会报错,因为。原创 2024-08-21 10:19:29 · 880 阅读 · 0 评论 -
【Cpp筑基】五、类的继承、虚函数、抽象基类
Cpp系列笔记目录。原创 2024-08-10 16:33:20 · 1258 阅读 · 0 评论 -
【Cpp筑基】四、重载运算符、友元、类的转换函数
【Cpp筑基】一、内联函数、引用变量、函数重载、函数模板【Cpp筑基】二、声明 vs 定义、头文件、存储持续性作用域和链接性、名称空间【Cpp筑基】三、对象和类【Cpp筑基】四、重载运算符、友元、类的转换函数在C++中,运算符重载(operator overloading)允许开发者定义或重新定义标准运算符的行为,使其可以用于自定义类型(例如类)。通过运算符重载,可以让用户定义的类型与内置类型一样自然地进行运算操作,提高代码的可读性和易用性。运算符重载是在C++中提供的一种特性,允许为用户定义的类型(原创 2024-08-08 09:55:39 · 344 阅读 · 0 评论 -
【Cpp筑基】三、对象和类
内联函数是一种建议编译器在每次调用该函数时,将其代码插入到调用点处,而不是进行常规的函数调用。这可以减少函数调用的开销,提高程序执行效率,尤其是对于短小的函数。原创 2024-08-07 15:00:23 · 1121 阅读 · 0 评论 -
【Cpp筑基】二、声明 vs 定义、头文件、存储持续性作用域和链接性、名称空间
什么是声明?什么是定义?在C++中,声明(Declaration)和定义(Definition)是两个重要的概念,它们在程序的组织和编译过程中起着不同的作用。声明是告诉编译器某个变量、函数、类或者其他标识符的名称及其类型,但不包含具体的实现或者初始化,声明的主要目的是让编译器知道这些标识符的存在及类型。声明(Declaration):告诉编译器某个变量的名字和类型,但不分配存储空间(除非它也是一个定义)。定义(Definition):不仅告诉编译器变量的名字和类型,还分配存储空间。变量声明。原创 2024-08-06 15:48:27 · 1288 阅读 · 0 评论 -
【Cpp筑基】一、内联函数、引用变量、函数重载、函数模板
左值(lvalue,locatable value)是指能够定位的值,它表示存储在内存中的某个位置的对象。因此,左值是可以取地址的,可以出现在赋值操作的左侧。右值(rvalue,readable value)是指不具有持久存储位置的临时值,它通常是表达式求值的结果。,如果两个函数的参数数目和类型相同,同时参数的排列顺序也相同,则它们的特征标相同,而变量名是不重要的。C++提供了一种内联函数,在 C++ 中,内联函数(inline function)是一种特殊的函数,其定义使用。例如,创建一个引用变量。原创 2024-08-06 10:27:19 · 1081 阅读 · 0 评论 -
C++中的智能指针
笔者在学习ROS2的过程中,遇到了这种用法,一眼看不懂,才发现笔者对于。原创 2024-04-23 17:50:28 · 849 阅读 · 0 评论 -
C++中的Lambda匿名函数
可以使用隐式捕获模式,然后为特定的变量显示指出相反的模式。例如,lambda主体需要通过引用的方式访问外部变量。初始化捕获是使用初始化列表来捕获外部变量,可以用于按值捕获或者按引用捕获。则表示只是定义了一个 Lambda 函数,并不会立即执行。表示 lambda 表达式的主体不需要访问封闭范围内中的变量。可以立即执行 Lambda 函数,并返回函数的结果。表示通过引用的方式来捕获引用的所有变量,而。值捕获需要手动来指定,例如有一个变量。,然后执行匿名函数的函数体,执行结果。,并通过值访问外部变量。原创 2024-04-22 15:24:43 · 787 阅读 · 0 评论 -
【Cpp巩固】引用与指针
笔者在学习Cpp的过程中老是会对指针和引用使用产生疑问,那本文就来详细对比一下指针和引用的区别。原创 2024-04-14 15:51:28 · 604 阅读 · 0 评论 -
C++ STL简明教程
std::vector 变量名;可以是各种类型,也同样可以是STL容器,举个例子,//这里定义了一个二维的向量可以像普通类型一样进行定义std::mapstd::map 变量名;//使用string需要先#include 使用构造函数进行初始化使用初始化器{}来初始化使用make_pair函数进行初始化// 使用auto自动推断构建后的类型setstd::set 变量名;原创 2024-03-27 22:18:47 · 1314 阅读 · 0 评论 -
Window系统下Vscode配置C/Cpp运行+调试环境
配置了Cpp的运行环境,我们是无法进行单步调试运行的,这时就需要配置Cpp的调试环境了,在。打开Vscode,我们新建一个目录用于专门存放我们的。文件主要负责我们的调试过程,我们需要配置这两个文件。接下来我们就能测试一下是否配置成功了,新建一个。下载完毕后,需要进行解压,然后配置环境变量。,请大家举一反三,合理配置自己的路径。,将你的存放路径拷贝过来,我的路径即是。配置完毕后,你的文件目录中会出现一个。如果出现下列内容,则表明配置成功。配置到环境变量中,完整的路径是。,我们需要将其中子文件夹的。原创 2024-03-13 16:59:07 · 1227 阅读 · 0 评论 -
Python中sys.argv[ ]与Cpp中int main(int argc char *argv[ ])的用法
最近在学习ROS,在服务通信中老是遇到这两种用法,在以前系统学习Python和Cpp的时候,遗忘了这一知识点,现在进行补票。原创 2023-02-27 11:28:46 · 766 阅读 · 0 评论 -
初识Cpp之 九、模板和STL
Cpp中另一种编程思想称为泛型编程,主要利用的技术是模板,Cpp提供两种模板机制函数模板和类模板。模板就是建立通用的模具,大大提高程序的复用性。 函数模板是通用的函数描述,函数模板使用泛型来定义函数,其中的泛型可用具体的类型(如double和int)替换。通过将类型作为参数传递给模板,可使编译器生成该类型的函数。这种方式也被称为通用编程。创建函数模板需要使用关键字==和关键字==。 函数模板的作用是,建立一个通用函数,其函数返回值类型和形参类型可以不具体指定,用一个虚拟的类型来表示。模板的创建语法:原创 2022-09-04 10:36:20 · 1237 阅读 · 0 评论 -
初始Cpp之 八、类和对象
C++面向对象的三大特性:封装、继承和多态。 封装的意义在于:基本语法:或者实例化,通过类创建类的实例语法:,可以通过==成员访问符==来访问类中的属性和方法。示例: 封装的权限设置:类在设计时,可以把属性和方法放在不同的权限下加以控制。访问权限有三种: 在C++中,和的区别:唯一的区别在于默认的访问权限不同,默认的访问权限;而默认访问权限为。 将类的成员属性设置为私有:举个例子:(2)对象的初始化和清理 对象的初始化和清理是两个非常重要的安全问题,一个对象或者变量没有初始状态,对其使用原创 2022-09-04 10:20:39 · 1638 阅读 · 0 评论 -
初识Cpp之 七、流程控制
该常量等于每秒钟包含的系统时间单位数,因此用系统时间除以这个值,可以得到秒数。 C++11新增了一种循环:基于范围(range-based)的。这简化了一种常见的循环任务:对数组(或容器类,如。本节介绍Cpp相比于C语言特有的一些流程控制的方式。中,这个函数返回程序开始执行后所用的系统时间。若需要对数组进行修改,那么需要使用引用变量,符号。 利用系统时钟来编写演示循环,系统时钟函数。)的每个元素执行相同的操作。的返回值类型都不一样,在。中将其返回值类型定义为。原创 2022-09-04 10:11:23 · 415 阅读 · 0 评论 -
初识Cpp之 六、内存分配
进行内存分配的空间(不要尝试释放已经释放的内存块,这样做的结果是未定义的)。来进行内存分配和回收,在C++中仍然可以这样做,但是C++还有更好的方法——将找到一个长度正确的内存块,然后会返回该内存块的地址。2、堆区主要用C++的new关键字来开辟空间和释放空间。 C++程序在执行的时候,将内存大致分为4个区域。 在C语言中使用的是一套内存分配库函数。当没有足够的内存空间来进行分配的时候,:只要将数组的元素类型和元素数目告诉。创建的数组,应该使用另一种格式的。分配的内存块时,应该使用。原创 2022-09-03 17:30:28 · 592 阅读 · 0 评论 -
初识Cpp之 五、函数
只需要向函数原型提供默认参数,而函数的定义与没有默认参数的时候完全相同。如果没有指定函数的原型而是直接进行函数的定义,那么在没有函数原型的时候直接在函数定义中添加默认参数。原创 2022-09-03 17:28:02 · 1330 阅读 · 0 评论 -
初识Cpp之 四、数据类型
结构体是C++的OOP基础,结构体是用户定义的类型,而结构声明定义了这种类型的数据熟悉,定义了类型后,便可以创建这种类型的变量。函数来进行字符串的比较,详见C语言。 C++将大括号初始化器作为一种通用的初始化方式,可用于所有类型,同样这种方式可以适用于数组,并且可以省略。 因此,在C++中有两种风格的字符串,一种是延续了C语言风格的字符串,另一种是C++风格的字符串。函数,使用这种方式,需要时刻注意不能超过数组的容量,否则会出错。 结构体的声明,结构体的声明和定义结构体变量可以组合成一个步骤。原创 2022-09-03 17:20:09 · 1995 阅读 · 1 评论 -
初识Cpp之 三、Cpp预处理器
C++和C语言一样,也使用一个预处理器,在程序进行主编译之前对源文件进行处理,有些C++实现使用翻译器程序将C++程序转化为C语言程序,虽然翻译器也是一种预处理器,但是这里不讨论这种预处理器。 名称空间支持是一项C++特性,旨在编写大型程序以及将多个厂商的现有代码组合起来的程序时更加容易,有助于组织程序。所包含的文件名,被称为头文件(header file),C++编译器自带了很多头文件,每个头文件都支持一些特定的工具。,但是C++的用法变了,C++对老式的C语言头文件保留了拓展名。原创 2022-09-03 17:15:49 · 728 阅读 · 0 评论 -
初识Cpp之 二、IO与文件
该函数由两个参数,第一个参数的用于存储输入行的数组的名称,第二个参数是要读取的字符数(比实际读取少1字符,用于存储空字符)。因为当我们需要写入一些非文本的内容的时候,二进制的方式便于我们进行操作。函数读取整行,它使用回车键输入的换行符来确定读取的结束。要调用这种方法,可以使用==,参数解释:字符指针buffer指向内存种一段存储空间,len是读写的字节数。,参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数。也是一个智能对象,它可以将输入转化为接受信息的变量能够接受的形式。原创 2022-09-03 17:13:35 · 473 阅读 · 0 评论 -
初识Cpp之 一、基础知识
C++融合了三种不同的编程方式:1、C语言代表的过程性语言,2、C++在C语言的基础上添加的类代表的面向对象语言,3、C++模板支持的泛型编程。使用C++的原因之一是为了利用其面向对象的特性。要利用这种特性,必须对标准C语言知识有较为深入的了解,因为它提供了基本类型、运算符、控制结构和语法规则。 面向对象编程(Object Oriented Programming, OOP)的诞生,试图让语言来满足问题的要求,其理念是设计与问题本质特性相对应的数据格式。原创 2022-09-03 17:10:27 · 2810 阅读 · 0 评论 -
C语言数据结构知识点小结(全)
C语言数据结构小结,B站青岛大学-王卓授课笔记原创 2022-07-14 16:05:22 · 48794 阅读 · 24 评论 -
C语言所有知识点小结
C语言所有知识点小结,适合查漏补缺。是笔者在学习《C Primier Plus》的过程中的笔记,希望和大家一起分享。原创 2022-06-21 17:25:54 · 1212 阅读 · 1 评论 -
C语言指针就该这样学(指针练习)
C语言指针就该这样学(指针练习)CatalogC语言指针就该这样学(指针练习)0x00 - 关于指针练习的重要总结0x01 - 指针练习第一部分0x011 - 第一个练习0x012 - 第二个练习0x013 - 第三个练习0x014 - 第四个练习0x015 - 第五个练习0x00 - 关于指针练习的重要总结数组名通常是指数组首元素的地址,但是有如下两个例外情况:1、当数组名放在运算符sizeof之中的时候,数组名表示整个数组,sizeof(arr)求取整个数组的大小。(在下文中简称情况一)2、原创 2022-05-25 17:10:16 · 634 阅读 · 0 评论
分享