- 博客(46)
- 收藏
- 关注
原创 代码随想录八股训练营第四十天| C++
在 C++ 中,菱形继承(Diamond Inheritance)是指一个类(称为派生类)继承两个或多个基类,而这些基类又有一个共同的基类。这种继承结构在类图上呈现出菱形,因此得名。菱形继承在 C++ 中特别常见,因为它允许多重继承,这是 C++ 与其他面向对象语言(如 Java 或 C#)的一个重要区别。菱形继承:在 C++ 中,菱形继承是一个常见的多重继承问题,它可能导致二义性和资源浪费。通过使用虚继承(virtual inheritance),可以确保基类只有一个共享实例,从而解决这个问题。
2024-09-19 22:49:41 999
原创 代码随想录八股训练营第三十九天| C++
Lambda 函数和单例模式都是现代 C++ 编程中的重要概念。Lambda 函数提供了一种灵活的方式来编写简短的匿名函数,而单例模式则是一种确保类只有一个实例的设计模式。在多线程环境中实现单例模式时,需要特别注意线程安全。C++11 提供了和这样的工具来帮助我们以线程安全的方式实现单例模式,而 Lambda 函数则因其简洁和表达力而成为编写算法和处理数据集时的首选。通过合理运用这些特性,我们可以编写出既高效又安全的代码。
2024-09-10 09:37:00 740
原创 代码随想录八股训练营第三十八天| C++
移动语义通过移动构造函数和移动赋值运算符,允许资源从一个对象转移到另一个对象,避免了不必要的拷贝,从而提高了性能。右值引用是实现移动语义的关键,它允许临时对象被“移动”而不是被拷贝。左值引用和右值引用的主要区别在于它们绑定的对象类型和用途,左值引用用于访问和修改已存在的对象,而右值引用用于实现移动语义和优化性能。这些特性在标准库中广泛应用,如容器操作,进一步增强了C++的性能和资源管理能力。
2024-09-09 13:51:19 789
原创 代码随想录八股训练营第三十七天| C++
std::map和根据应用需求的不同,各有优势;而 C++11 的新特性则为开发者提供了强大的工具,以应对各种编程挑战。
2024-09-07 13:50:37 1530
原创 代码随想录八股训练营第三十六天| C++
本文首先分析了和这两种向容器添加元素的方法。通过拷贝或移动对象来添加元素,而则直接在容器内存中构造对象,避免了不必要的拷贝或移动,从而提高了效率。接着,文章深入探讨了std::mapstd::deque和std::list三种容器的实现原理和数据结构。std::map基于红黑树,提供了基于键的快速查找和有序存储;std::deque由动态数组组成,支持两端的快速插入和删除;std::list则是一个双向链表,提供了高效的插入和删除操作。
2024-09-07 00:46:20 1022
原创 代码随想录八股训练营第三十四天| C++
vector和list作为 C++ STL 中的两种序列容器,它们在数据存储、访问方式、操作效率等方面有着显著的差异。vector提供了类似动态数组的功能,支持快速的随机访问,适合于需要频繁访问元素的场景。而list实现了双向链表,提供了高效的插入和删除操作,尤其适合于元素频繁变动的情况。开发者应根据实际应用的需求,权衡两者的优缺点,选择最合适的容器类型,以实现最优的性能和资源利用。
2024-09-06 08:54:05 992
原创 代码随想录八股训练营第三十三天| C++
构造函数和析构函数是C++中用于管理对象生命周期的关键工具。构造函数有多种类型,包括默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数、委托构造函数和转换构造函数,每种都有其特定的用途和场景。默认构造函数用于无参数初始化,参数化构造函数允许带参数的初始化,拷贝构造函数用于创建对象的副本,移动构造函数用于资源的移动,委托构造函数通过调用其他构造函数简化代码,而转换构造函数则用于类型转换。需要注意的是,构造函数不能是虚函数,因为它们在对象类型完全确定之前就被调用。
2024-09-06 08:37:59 860
原创 代码随想录八股训练营第三十二天| C++
在C++中,构造函数和析构函数是特殊的成员函数,它们在对象的生命周期中起着重要的作用。构造函数和析构函数是C++中用于管理对象生命周期的关键工具。构造函数有多种类型,包括默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数、委托构造函数和转换构造函数,每种都有其特定的用途和场景。默认构造函数用于无参数初始化,参数化构造函数允许带参数的初始化,拷贝构造函数用于创建对象的副本,移动构造函数用于资源的移动,委托构造函数通过调用其他构造函数简化代码,而转换构造函数则用于类型转换。
2024-09-04 00:48:56 621
原创 代码随想录八股训练营第三十一天| C++
虚函数和虚函数表是C++中实现多态性的重要机制。虚函数允许派生类重写基类的行为,而虚函数表则存储了指向这些重写函数的指针,使得在运行时可以动态地调用正确的函数实现。这种机制不仅提供了灵活性,还允许程序在不知道对象确切类型的情况下,通过基类指针或引用调用正确的函数。此外,虚函数表还确保了即使在对象被删除时,也能正确地调用派生类的析构函数,避免资源泄露。通过理解虚函数和虚函数表的工作原理,我们可以更好地利用C++等面向对象编程语言的强大功能。
2024-09-03 00:41:05 1606
原创 代码随想录八股训练营第二十九天| C++
这三大特性共同构成了面向对象编程的核心,使得C++能够提供强大的抽象和代码复用能力,同时也使得代码更加模块化和易于维护。本文深入探讨了C++的面向对象编程特性,包括封装、继承和多态,以及重载与重写的区别。通过理解这些概念,程序员可以更有效地使用C++构建灵活、健壮的软件系统。
2024-09-02 08:59:32 937
原创 代码随想录八股训练营第二十七天| C++
内存泄漏(Memory Leak)是指在程序运行过程中,由于疏忽或错误导致已分配的内存空间在不再使用后没有被正确释放,从而造成这部分内存无法被再次使用或分配给其他程序,随着时间的推移,这可能导致系统资源耗尽,影响系统性能甚至导致系统崩溃。野指针(Wild Pointer)在C++中指的是一个未初始化或已释放的指针。未初始化的指针可能包含任意值,而已释放的指针指向的内存区域可能已经被操作系统回收或分配给其他程序使用。使用野指针可能会导致程序崩溃或数据损坏。
2024-09-01 15:02:35 925
原创 代码随想录八股训练营第二十六天| C++
指针常量:保证指针不会改变指向,但允许通过指针修改数据。常量指针:保证指针所指向的数据不会通过该指针被修改,但允许改变指针的指向。理解这两者之间的区别对于编写安全且可维护的代码非常重要,尤其是在涉及到数据保护和指针操作的复杂场景中。通过分析static和const的多种用途、比较指针类型及其与结构体和类的不同特性,本文为C++程序员提供了一份关于这些基础但关键概念的全面指南,助力于更高效和安全地编写代码。
2024-08-31 15:47:07 1537
原创 代码随想录八股训练营第二十五天| C++
在C++中,智能指针是一种管理动态分配(使用new关键字分配的)内存的类模板,它们在对象不再使用时自动释放内存,从而帮助防止内存泄漏。智能指针通常在std命名空间中定义。:独占所有权模型,不允许复制,但可以移动。析构时自动释放资源。:共享所有权模型,通过引用计数来管理资源。当最后一个shared_ptr被销毁时,引用计数减至0,资源被释放。:不增加引用计数,用于解决shared_ptr可能导致的循环引用问题。智能指针可以与自定义删除器一起使用,允许开发者指定如何释放资源。
2024-08-30 21:14:31 983
原创 代码随想录八股训练营第二十四天| C++
本文首先介绍了静态变量、全局变量和局部变量的区别,包括它们在内存中的分布情况。接着,我们探讨了指针和引用的不同用法及其背后的原理。最后,我们详细解释了C++程序在运行时的内存布局,包括栈、堆和全局/静态存储区的角色和相互作用。定义:全局变量的定义是指分配存储空间和初始化变量。声明:全局变量的声明可以使得在其他文件中可以访问这个全局变量,声明通常使用extern关键字。// 定义并初始化全局变量// 函数声明return 0;// 函数定义//使用 extern 声明全局变量。
2024-08-29 11:45:05 1038 1
原创 代码随想录八股训练营第二十三天| C++
本文首先介绍了静态变量、全局变量和局部变量的区别,包括它们在内存中的分布情况。接着,我们探讨了指针和引用的不同用法及其背后的原理。最后,我们详细解释了C++程序在运行时的内存布局,包括栈、堆和全局/静态存储区的角色和相互作用。定义:全局变量的定义是指分配存储空间和初始化变量。声明:全局变量的声明可以使得在其他文件中可以访问这个全局变量,声明通常使用extern关键字。// 定义并初始化全局变量// 函数声明return 0;// 函数定义//使用 extern 声明全局变量。
2024-08-29 00:00:18 839
原创 代码随想录算法训练营第二十八天| 122.买卖股票的最佳时机II 、55. 跳跃游戏、 45.跳跃游戏II、1005.K次取反后最大化的数组和。
补第二十八天!
2024-08-28 16:54:37 103
原创 代码随想录算法训练营第二十一天| 235. 二叉搜索树的最近公共祖先 、701.二叉搜索树中的插入操作、 450.删除二叉搜索树中的节点。
补二十一天卡!
2024-08-28 16:43:31 110
原创 代码随想录算法训练营第二十天| 235. 二叉搜索树的最近公共祖先 、701.二叉搜索树中的插入操作、 450.删除二叉搜索树中的节点。
补第二十天打卡!
2024-08-28 16:41:46 233
原创 代码随想录算法训练营第十六天| 513.找树左下角的值 、112. 路径总和、 106.从中序与后序遍历序列构造二叉树、 105.从前序与中序遍历序列构造二叉树。
补十六天打卡。
2024-08-28 16:35:37 79
原创 代码随想录算法训练营第十五天| 110.平衡二叉树 、 257. 二叉树的所有路径、 404.左叶子之和 、 222.完全二叉树的节点个数。
补第十五天打卡。
2024-08-28 16:31:49 96
原创 代码随想录算法训练营第十四天| 226.翻转二叉树 、101. 对称二叉树、 104.二叉树的最大深度、 111.二叉树的最小深度。
补15天打卡。
2024-08-28 16:15:16 95
原创 代码随想录算法训练营
实习期间过于忙,没有时间打卡,但从未缺席过任何一天的内容,如今时间已经过去一个月,自己做题也逐渐熟悉起来了,也逐步养成了做题的习惯,接下里的的时间内,会加上C++八股的一些内容。希望秋招有个好结果!
2024-08-28 15:58:21 69
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人