自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 解锁c++模板:从入门到精通

在编程的时候我们可能会遇到一种情况,那就是编写一个功能相同但处理的数据类型不同的函数。这里我们可以发现两个函数除了参数类型不一样,其他逻辑一模一样,因此就有了模板。在上面这段代码中template<class T> 表示 T可以代表任意一种数据类型,我们再用T定义一个临时变量,这样就轻松实现了任意相同数据类型的变量的交换函数。调用这个函数只要像调用普通函数一样调用即可,编译器会自动推导变量类型,从而生成相应的函数。由此可见c++模板的重要性,让我们编写一次代码,便可实现多个函数。

2025-05-11 21:45:19 821

原创 一文搞懂C++ queue 队列

队列是一种遵循先进先出(FIFO,First In First Out )原则的数据结构。这一原则就像是我们日常生活中排队买票或者在食堂排队打饭的场景,先排在队伍中的人会先接受服务,而后来的人则依次排在队尾等待,最早进入队列的元素总是最先被处理。

2025-04-23 16:02:46 931

原创 一文搞懂Stack

栈是一种特殊的线性表,它遵循后进先出(Last In First Out,LIFO)的原则。想象一下餐厅里一摞叠放的盘子,我们总是从最上面取盘子使用,而新洗好的盘子也总是放在最上面。这就如同栈的操作,最后放入栈中的元素总是最先被取出,而最先放入的元素则最后被取出。这种简单而又独特的数据存储和访问方式,赋予了栈在众多编程场景中高效解决问题的能力。

2025-03-11 17:24:22 428

原创 手把手教你实现C++的list容器

我们在这里用temp存取要插入位置的节点和用next存取它下一个节点,用cur动态分配一个空间存val,让temp后驱指针指向cur,cur的前驱指针指向temp,cur的后驱指针指向next,next的前驱节点指向cur,这样我们就完成了在任意位置的插入。这样,当我们使用 const 对象时,就会调用返回 const 迭代器的函数,确保在遍历过程中不会意外修改容器中的元素。而循环特性,则保证了链表的最后一个节点的后继指针指向头节点,头节点的前驱指针指向最后一个节点,形成一个完整的环。

2025-03-09 17:30:00 842

原创 解锁C++ list:从入门到精通的全攻略

上面mylist1是一个空链表,mylist2则是有五个元素,每个里面值都是10,mylist3则是则是有五个值里面分别存着2,36,38,99,20。在这个修正后的代码中,当删除元素 3 时,it = myList.erase(it)会将it更新为指向元素 4 的迭代器,从而避免了迭代器失效带来的问题,确保后续的遍历操作能够正确进行。最基础的是创建一个空的list,就像准备一个空的收纳盒,等待存放物品。​需要注意的是,list的迭代器不支持随机访问,所以在判断迭代器是否到达末尾时,只能使用!

2025-02-24 16:00:00 855

原创 手把手教你手撕vector:从原理到实现

在 C++ 的标准模板库(STL)中,vector可是一个相当重要且常用的容器 ,它就像是一个功能强大的动态数组,与我们平时使用的普通数组有相似之处,但又具备许多普通数组所没有的优势。比如说,普通数组在定义时就需要确定大小,一旦确定,在程序运行过程中大小就不能再改变了,如果我们的需求是不断地添加或删除元素,普通数组就很难满足这种动态变化的需求。但vector不同,它的大小可以在运行时动态地增长或缩小,就像一个可以自动伸缩的容器,非常灵活。举个生活中的例子,

2025-02-19 16:00:00 1673

原创 一文吃透C++vector容器

在 C++ 的世界里,vector是标准模板库(STL)中一个极为重要的容器,它就像是一个神奇的动态数组。与普通数组不同,vector的大小不是固定不变的,它可以在运行时根据需要自动调整,这为我们的编程带来了极大的便利。​其中,T是存储在vector中的元素类型,,无论是基本数据类型(如int、double、char等),还是自定义的类类型。Allocator是一个可选的参数,用于指定内存分配器,默认情况下使用标准的内存分配器。

2025-02-11 16:00:00 1791

原创 String类模拟实现

在开始模拟实现string类之前,首先需要创建一个自定义的命名空间。这是因为我们要实现的string类很可能会与 C++ 标准库中的std::string类产生命名冲突。通过将我们自己实现的string类放在一个独立的命名空间中,可以有效地避免这种冲突,确保代码的独立性和可维护性。// 这里将放置我们模拟实现的string类及相关代码在这个命名空间内,我们可以自由地定义类、函数和变量,而不用担心与标准库或其他代码中的命名冲突。

2025-02-08 16:48:13 735

原创 全面解析String类

在 C 语言的世界里,,为了方便操作,C 标准库提供了一系列str系列的库函数,如strcpy、strcat、strlen等。虽然这些库函数在一定程度上满足了我们对字符串的操作需求,但是它们与字符串是分离开的,不太符合面向对象编程(OOP)的思想。而且,C 语言中字符串的底层空间需要用户自己管理,这就像让你自己搭建帐篷去露营,虽然很有挑战性,但也容易出错。

2025-02-07 17:15:28 654

原创 解锁STL:C++高效编程的秘密武器

STL,即标准模板库(Standard Template Library) ,是 C++ 标准库的重要组成部分,它诞生于 20 世纪 90 年代初,由 Alexander Stepanov 和 Meng Lee 开发,后被纳入 C++ 标准,宛如一颗璀璨的明珠,在 C++ 编程领域散发着独特的光芒。​STL 的核心思想是 “将算法和数据结构与数据类型解耦” ,这一思想的实现离不开大量的泛型编程和模板元编程技术。

2025-02-03 15:08:48 1072

原创 C++11

不过,静态局部变量和全局变量是个例外,lambda 表达式无需捕捉就可以直接使用它们。这是因为静态局部变量和全局变量的作用域本身就比较特殊。另外,如果 lambda 表达式定义在全局位置,那么它的捕捉列表必须为空。

2025-02-02 21:38:11 829

原创 C++ 多态

多态是⼀个继承关系的下的类对象,去调用同⼀函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象优惠买票。实现多态还有两个必须重要条件:• 必须指针或者引用调用函数。(后面会叙述什么是虚函数)• 被调用的函数必须是虚函数。

2024-09-20 18:24:04 820 2

原创 C++ 内存管理

6. 申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造函数与析构函数,而new在申请空间后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成空间中资源的清理释放。3. malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可,如果是多个对象,[]中指定对象个数即可。new/delete申请和释放的是单个元素的空间,new[]和delete[]申请的是连续空间,而且new在申。在空间上执行析构函数,完成对象中资源的清理工作。

2024-09-12 17:30:00 553 2

原创 c++类和对象(下)

这个内部类就叫做内部类。内部类是⼀个独立的类,跟定义在全局相比,他只是受外部类类域限制和访问限定符限制,所以外部类定义的对象中不包含内部类。

2024-09-11 19:52:59 881 6

原创 C++ 类继承

下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。

2024-09-11 16:27:09 999 1

原创 C++基础类和对象(中)

在C++中,构造函数是一种特殊的成员函数,用于在创建对象时初始化对象。相当于以前所写的Init函数作用类似。析构函数是类的一个成员函数,用于在对象生命周期结束时自动调用,执行清理工作,如释放分配的内存、关闭打开的文件等。类似与Destory()函数。如果一个构造函数的第一个参数是自身类类型的引用,且任何额外的参数都有默认值,则此构造函数也叫做拷贝构造函数,也就是说拷贝构造是⼀个特殊的构造函数。当运算符被用于类类型的对象时,C++语言允许我们通过运算符重载的形式指定新的含义。

2024-08-01 14:52:48 853 14

原创 C++基础(类和对象上)

(1)C++中class和struct是定义类的关键字,其后接着“{};”,要注意分号不可以省略。(2){}中的内容称为类的成员,其中的变量称为类的属性或成员变量,类中的函数称为类的方法或成员函数。(3)C++中兼容C语言中struct的用法。(4)定义在类内的成员函数默认为inline。private:// 为了区分成员变量,⼀般习惯上成员变量// 会加⼀个特殊标识,如_ 或者 m开头int _year;

2024-07-24 21:38:23 577 10

原创 C++入门基础

C++的起源可以追溯到1979年,当时Bjarne.Stroustrup(本贾尼·斯特劳斯特卢普,各个翻译的名字不同的地⽅可能有所不同)在⻉尔实验室从事计算机科学和软件⼯程的研究⼯作。⾯对项⽬中复杂的软件开发任务,特别是模拟和操作系统的开发⼯作,他感受到了现有语⾔(如C语⾔)在表达能⼒、可维护性和可扩展性⽅⾯的不⾜。1983年,在C语⾔的基础上添加了⾯向对象编程的特性,设计出了C++语⾔的雏形,此时的C++已经有了类、封装、继承等核⼼概念,为后来的⾯向对象编程奠定了基础。这⼀年该语⾔被正式命名为C++。

2024-07-11 13:51:18 995 6

空空如也

空空如也

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

TA关注的人

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