
c/c++
文章平均质量分 78
怎么这么帅啊
这个作者很懒,什么都没留下…
展开
-
【学习笔记】【C++总结B】string类实现;设计模式:单例模式、观察者模式、适配器模式;自定义迭代器与手写垃圾回收GC;JJ::allocator;
重学C++慕课网1章 C++概括 试看5 节 | 40分钟了解C++的历史概况,C++语言的特点及C++语言作用,认识哪些场合下C++是无可替代的;1-1 2020重C++ 课程导学 (08:38)试看1-2 CPP的历史 (12:54)1-3 CPP的特点 (10:01)1-4 CPP的应用 (08:06)图文:1-5 第一章课后练习题2章 C++基础语法 8 节 | 102分钟本章讲解编程语言的层次,编译语言的特点;深入学习C++常见的标识符,关键字,数据类型,变量,常原创 2021-08-07 14:48:57 · 475 阅读 · 0 评论 -
【踩坑记录】const 引用作为形参,实际上也是有拷贝存在的;常量引用、const 引用接受常量的时候,会构造一个临时变量出来;
文章目录结论:应用:证明:-通过反汇编证明代码实现;证明:- C++ primer 讲解结论:const 引用因为能接受范围大,可以接受常量,所以被经常使用;const 引用 被传入常量时,还是会在栈中构造一个匿名变量(临时变量)然后引用指向这个变量;应用:我们经常会将常量直接传入函数,(当函数形参为常量引用时候);如下面第二次的func调用我本来以为直接传入常量,引用指向的空间是常量存在的静态区;后来好奇看了一下发现不是;书上也明确有讲出会构造临时变量;void func(原创 2021-07-27 22:12:49 · 456 阅读 · 0 评论 -
【C++】为什么构造函数不能是虚函数(没有意义,不能实现多态);构造函数内能调用虚函数吗(可以,不能实现多态
文章目录一、虚析构函数二、构造函数为什么不能是虚函数?三、虚构造函数没有意义:1、首先是C++ Primer Plus 的解释:2、C++之父的解释参考一、虚析构函数虚析构函数是为了析构对应的对象,而不是指针指向谁就析构谁;主要是为了多态的使用;所以去虚函数表中找这个对象的析构函数来析构;进而析构其父类;二、构造函数为什么不能是虚函数?虚构造函数不是不能,而是没有意义。首先,构造函数不被继承,构建派生类的时候,也会构建基类,虚构造没有意义;C++ 作者的解释为,虚函数为了多态设计,原创 2021-07-22 21:01:55 · 2069 阅读 · 0 评论 -
【C++】【学习笔记】【二叉树与递归详解与例题】前驱后继问题;染色法递归遍历;最近公共祖先(LCA) 问题
目录六、二叉树与递归1、二叉树天然递归结构2、递归的终止条件 与 递归结构2、较复杂的递归逻辑3、二叉搜索树中的问题参考六、二叉树与递归二叉树是以二叉树定义二叉树的数据结构;天然具有递归性质递归:递归终止条件;递归过程;1、二叉树天然递归结构 104. 二叉树的最大深度 同剑指 Offer 55 - I. 二叉树的深度 递归加深度 111. 二叉树的最小深度dfs int minDepth(TreeNode* root) { if(!root)原创 2021-07-18 14:17:48 · 364 阅读 · 1 评论 -
【学习笔记】【C++整理A】【总】单例模式-饿汉式、懒汉式;
目录1章 C++概括 试看5 节 | 40分钟2章 C++基础语法 8 节 | 102分钟3章 C++的运算符与表达式11 节 | 180分钟4章 C++基础容器11 节 | 244分钟5章 彻底学会 C++ 指针,引用21 节 | 361分钟6章 C++基础句法21 节 | 322分钟7章 C++高级语法20 节 | 285分钟8章 C++编程思想17 节 | 192分钟9章 C++进阶编程19 节 | 267分钟10章 桌面应用项目实战:设计项目的架构和标准4 节 | 25分钟11章 实现项目《慕影》的原创 2021-07-16 11:40:34 · 726 阅读 · 0 评论 -
【C++】【 lambda使用】priority_queue 与 sort 对 lambda的使用; lambda的多种使用和声明;decltype/auto推导;
目录一、Lambda 函数与表达式二、priority_queue 定义 及其使用三、sort定义 及其使用参考一、Lambda 函数与表达式C++11 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式)。Lambda 表达式把函数看作对象。Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值。Lambda 表达式本质上与函数声明非常类似。Lambda 表达式具体形式如下:[capture](parame原创 2021-07-11 11:41:05 · 1598 阅读 · 0 评论 -
【C++】【缓存替换策略】【LRU】【LFU 】【FIFO】LRU算法C++实现,并测试;
目录先进先出算法 FIFO ;先进缓存的先被替换最不经常使用算法 LFU ;淘汰最不常使用的字块;额外空间记录字块使用频率;最近最少使用算法 LRU ; 优先淘汰一段时间内没使用的字块;一般使用双链表实现;把当前访问的节点放在表头(淘汰链表尾部);使用双向链表,实现置换算法;实现双向链表:存放key-value、上一个节点指针、下一个节点指针;接口:头部尾部增加节点;弹出头部、尾部节点;删除、增加任意节点;...原创 2021-07-03 21:27:37 · 1622 阅读 · 3 评论 -
【C/C++】int,long和long long的区别;int 、long 占多少字节?VS 下int、long、long long占多少字节。X86和X64下的区别。
先说理论以前学的是long 在32位系统中4字节,64位系统中8字节。但是实际用的时候发现不是,现在总结一下:对于long 来说:OSarchsizeWindowsIA-324 bytesWindowsIntel 644 bytesWindowsIA-644 bytesLinuxIA-324 bytesLinuxIntel 648 bytesLinuxIA-648 bytesMac OSIA-324 bytes原创 2021-07-01 17:04:20 · 2939 阅读 · 0 评论 -
【C++】【cout】cout 二进制输出,bitset用法;八进制、十进制、十六进制输出
目录一、cout1、bitset2、二进制输出:3、 八、十、十六进制输出:一、coutcout不支持输出二进制,只支持八、十、十六进制输出;要输出二进制要用到bitset。应该是bitset 重载了<<1、bitsettemplate <size_t N> class bitset;是一个二进制容器。2、二进制输出:int i = -135;while (1){ cout <<i<<" : "<< bitset<si原创 2021-06-29 14:39:00 · 5121 阅读 · 0 评论 -
【C++】【并查集】并查集实现、模板;并查集基于size、rank的优化;
目录一、引入并查集1、连接问题与路径问题:2、接口二、基础并查集1、 Quickfind模式:1.1、实现2、Quickunion模式:2.1、实现3、Quickunion模式优化:3.1、 Quickunion优化size:3.2、优化size实现3.3、 Quickunion优化rank:3.4、优化rank实现参考一、引入并查集○ 解决连接问题(网络中节点的连接问题)(两个社交网络中的人能不能根据好友互相认识)。○ 数学中的集合类的实现。○ 并查集的高效是因为只回答了连接问题,没有回答路径问题原创 2021-06-29 09:20:00 · 835 阅读 · 1 评论 -
【C++】 【滚动哈希】【Rolling Hash】字符串匹配算法问题; Rabin-Karp 算法;哈希思想;哈希与哈希冲突处理;
目录前言一、问题引入 - 字符串匹配 - 滚动哈希二、滚动哈希 - Rabin-Karp 算法三、代码参考前言哈希是一个思想,将字符串看成高进制的数指,求出其哈希值,用其哈希值解决问题。使用滚动哈希来求解字符串匹配问题就是 Rabin-Karp 算法;一、问题引入 - 字符串匹配 - 滚动哈希其实就是因为暴力法要重复计算好多子问题。那么用哈希来算,就只需要每次选头和尾。 1147. 段式回文字母转成哈希 整形然后取模,不等就直接不用判断,相等在判断哈希冲突的情况。 1392. 最长快乐前缀原创 2021-06-28 16:00:51 · 1609 阅读 · 0 评论 -
【学习笔记】【C++】【Leetcode 分门别类讲解】
目录概述一、时间复杂度分析二、数组问题。概述一、时间复杂度分析图的遍历:邻接表实现 :O(e+V) ;邻接矩阵实现O(e2) ;e为节点数,V为边数。字符串数组,先对字符串排顺序,再将数组按照字典序排序:时间复杂度:O( nslogs+snlogn),因为排序n个字符串+n个字符串的排序(字符串也得遍历一遍)均摊时间复杂度问题:对动态数组的扩容和缩容来说,均摊下去时间复杂度只是O(1);所以造成动态数组的操作,整体的均摊时间复杂度为O(1);但是要注意用lazy resize,避免复杂原创 2021-06-27 22:47:00 · 1453 阅读 · 0 评论 -
【C++】【非比较排序算法】【计数排序】计数排序的稳定性
目录前言一、计数排序1、引入2、更一般的计数排序3、计数排序的稳定性参考前言非比较排序不是说元素之间无法比较。而是说不通过直接比较来排序。常用于字符串的排序过程。一、计数排序计数排序所需要的空间:O(R ) 。R 为数字可能的范围。所以计数排序只适用于小数据范围的排序。是小数据范围,而不是小数据规模。且计数排序是稳定的。> 即,排序元素有多个域,排序前相等的两个元素,排序后位置不变。应用: 学生乘机排序等。1、引入对这类问题的解决:遍历数组,对0、1、2的个数进行统计;然后原创 2021-06-27 10:54:44 · 856 阅读 · 0 评论 -
【C++】【string】【char】10种将char、char* 添加到、转换到string的方法。
目录string构造函数std::stringstream *std::string::push_backstd::string::appendstd::string::assignstd::string::operator+= *std::string::operator=std::string::insertstd::string::replacechar -> char* -> string *参考加星号的是我常用的string构造函数string (size_t n, char c原创 2021-06-27 10:40:31 · 3439 阅读 · 0 评论 -
【C++】【哈希表】【哈希函数】实现自己的哈希表,解决哈希冲突;动态哈希表;
文章目录前言1、哈希表与哈希函数的引入2、哈希表一、设计1、一般、通用哈希函数的设计2、默认哈希函数二、哈希冲突1、链地址法。(seperate chaining )1、1实现1.2、测试2、哈希表的动态空间优化参考前言1、哈希表与哈希函数的引入就像这道题来说,用一个26个的int 型数组,就可以实现对每个字符进行哈希映射。其中哈希函数为:f(char) = char -‘a’ ;哈希表就是那个int [26];这种简单的哈希函数就处理了从键到索引的转换,同时也是简单的一一对应的。而更复杂原创 2021-06-26 15:33:54 · 2457 阅读 · 0 评论 -
【C++】【二叉树】【红黑树】构建RB tree、红黑树 类
文章目录前言1、红黑树定义2、红黑树性能3、红黑树特点一、重点解析1、插入规则1、1、插入节点旁没有红色节点:1、2、插入节点周围有红色节点:2、左旋转、右旋转3、颜色翻转4、插入节点5、析构函数二、完整红黑树类参考前言1、红黑树定义○ 每个节点或是红色,或是黑色。○ 根节点是黑色。○ 每个叶子节点(最后的空节点,和以前的叶子节点概念不一样)是黑色的。○ 红色节点的孩子是黑色的。 任意节点到叶子节点,经过的黑色节点数是一样的。2、红黑树性能完全随机的数据,二分搜索树就很好用了。极端情况会原创 2021-06-25 17:50:57 · 460 阅读 · 2 评论 -
【C++】【二叉树】【AVL 树】构建avl tree 类
文章目录前言一、重点解析1、恢复平衡2、插入节点3、删除节点3、析构函数二、完整AVL tree类参考前言AVL树的引入是为了改造BST 的不平衡性,防止退化为链表。BST 类的构造在文末有链接。AVL树使得其任一节点的左右子树高度差不超过1。平衡性相对宽松。使得其可以有看起来不平衡但却认为平衡的结构。而二叉堆、线段树等平衡二叉树是叶子节点的高度差不超过1。其在插入和删除的时候,都需要从插入、删除节点处向上维护平衡。一、重点解析1、恢复平衡恢复平衡分为了四种情况,分别记为LL、RR、LR原创 2021-06-25 11:14:45 · 514 阅读 · 0 评论 -
【C++】【前缀树】【Trie】前缀树实现,及其使用
目录一、前缀树二、完整代码引用一、前缀树前缀树又称Trie;常用于字典、通讯录的实现。相较于普通的映射:查询与插入的时间复杂度只与单词长度有关。二、完整代码包含了插入、查询、查询前缀;使用map来存next 节点是为了节省空间,以及不仅可以查找单词,还可以查找一些别的字符。同时也可以用泛型来替代char。使得其可以查找其他中文字符之类的。bool型的变量代表,以当前节点为根的单词是否存在。class Trie {private: struct node_trie{原创 2021-06-24 11:21:50 · 510 阅读 · 0 评论 -
【C++】【线段树】线段树实现,及其使用【区间树】
prim一、完整代码二、应用引用一、完整代码#include <cassert>#include <functional>template<class T>class SegmentTree {private: T *tree; T *data; int size; std::function<T(T, T)> function; int leftChild(int index) { r原创 2021-06-18 15:44:18 · 414 阅读 · 0 评论 -
【C++】【手撕】【top K】两个有序数组中第K个数据;(寻找两个正序数组的中位数)
题目描述文章目录题目描述一、思路二、难点:1、中位数:和是奇数和是偶数怎么办三、代码考察的点:一、思路最简单的思路就是从两个数组头/尾开始归并的计数。但是这样时间复杂度0(m+n);并不满足要求。我们利用二分查找 log 时间复杂度的优势。只要单调就能二分即:寻找两个排序数组中第K个数,先从左边取K/2个数,小的那一边的k/2都不可能是第K个数了,于是排除。更新K=k-k/2,也就是在剩下的数组中,找到第 新K的数字。直到K==1,那么取当前还剩余的数组中开头处偏小的。就像上图原创 2021-06-16 23:17:26 · 341 阅读 · 0 评论 -
【C++】【手撕】【top K】两个有序数组间相加和的Topk问题;优先队列、最大堆。
题目描述https://www.nowcoder.com/questionTerminal/7201cacf73e7495aa5f88b223bbbf6d1文章目录题目描述一、思路二、难点:三、代码四、实现:五、更进一步考察的点:一、思路[要求]时间复杂度为O(k \log k)O(klogk)大概能猜出来要用最大堆来实现了。然后再加上用个bfs来扫描周围的最大值。即:将右下角唯一知道的最大值压入最大堆;弹出最大堆中最大的值,这个值就可以加入最终结果中;将这个最大值的左边节点和上原创 2021-06-16 17:28:52 · 1316 阅读 · 0 评论 -
【C++】【二叉树】【二叉搜索树】构建二叉搜索树类。
文章目录一、重点解析1、插入节点2、删除节点2.1、删除最值2.2、删除一般节点3、析构函数二、完整BST类参考一、重点解析1、插入节点插入节点相对简单,只需要判断键值,替换掉相应键值,亦或是创建新的键值。 // 向以node为根的二分搜索树中, 插入节点(key, value), 使用递归算法 // 返回插入新节点后的二分搜索树的根 Node* insert(Node *node, Key key, Value value){ if( node == NULL原创 2021-06-14 15:33:09 · 308 阅读 · 0 评论 -
【C++】【查找算法】二分查找;upper 、lower bound;floor、ceil 等变种问题。【二分总结】
文章目录一、二分查找-basic1. caution:二、upper、lower bound1. caution:2.upper bound3.lower bound二、ceil、floor1. caution:2.ceil2.floor三、相关问题参考一、二分查找-basic时间复杂度 :O(logn);要求:排序数组。1. caution:循环不变量的定义 :// 在arr[l…r]之中查找target循环继续条件: l <= r// 二分查找法,在有序数组arr中,查找targ原创 2021-06-13 12:05:49 · 630 阅读 · 0 评论 -
【C++】【排序算法】归并排序;并的优化、应用插入排序的优化、额外空间的优化、迭代的归并【手撕排序】
文章目录一、归并排序1.优劣2.复杂度分析二、代码1.普通快排2.merge优化+插入排序优化3.额外空间的优化。参考一、归并排序1.优劣相对稳定;即:相同的元素,排之后的次序和排之前的次序一致。需要额外空间;即:在merge 的过程中,需要使用额外的空间。2.复杂度分析空间复杂度为O(n);时间复杂度:因为归并排序递归的将其二分,于是递归的层级就有logn层。具体的是以2为底n的对数。long2 n;每层递归中,都将n个数据都扫描了一次。例如:第二层递归中,堆left-mid原创 2021-06-12 15:13:26 · 649 阅读 · 0 评论 -
【C++】【排序算法】堆排序、构建堆、插入、pop堆顶【手撕最小堆】
文章目录一、最大堆二、最小堆代码1.构建最最小堆类1.1 简单两种排序应用:2.原地堆排序3.最小堆中,用插入排序优化shift 操作参考一、最大堆手撕最大堆在下面链接处,基础知识也有讲,这里就直接贴最小堆的实现。二、最小堆代码1.构建最最小堆类应用较广,适用于TOP K类问题。对于直接排序不是很适合。template<typename Item>class MinHeap {private: Item *data; int count; int capacity;原创 2021-06-10 10:12:37 · 526 阅读 · 0 评论 -
【C++】【排序算法】堆排序、构建堆、插入、pop堆顶【手撕最大堆】
文章目录一、堆排序的意义二、堆排序的应用二、代码1.构建最大堆类1.1 简单两种排序应用:1.2应用:剑指 Offer 40. 最小的k个数2.原地堆排序3.用插入排序优化shift 操作参考一、堆排序的意义构建最大堆,使其堆顶为最大元素。二叉堆为完全二叉树。二、堆排序的应用topK 类问题,通过构建K大小的堆。相较于快排思想,可以实现输入流的topK问题。。。。二、代码1.构建最大堆类应用较广,适用于TOP K类问题。对于直接排序不是很适合。class MaxHeap {pri原创 2021-06-10 09:51:33 · 784 阅读 · 0 评论 -
【C++】【排序算法】快排、双路快排、三路快排【手撕排序】
文章目录一、双路与三路提出的意义排序算法选择:二、代码1.普通快排2.双路快排3.三路快排参考一、双路与三路提出的意义如果包含大量重复元素,paitition会分的不平衡,最差情况退化为O(n2);所以把等于标定点的值均匀分到两边。排序算法选择:大量重复键值选择三路,其余选择两路。三路相较于两路对有重复键值时候优势大得多,但是重复小的反而慢一点,但是总体比两路强。两路与三路都会比归并快。二、代码1.普通快排带重复的,会使其很慢,尽量不要用。template <typename原创 2021-06-09 21:07:28 · 812 阅读 · 0 评论 -
【C++】【最短路径】Bellman-Ford 算法实现(贝尔曼-福特算法)(带负权边的图)【relaxation】
Bellman-Ford一、Bellman-Ford 算法 是什么?1.特点2.思想二、简易实现1.解读2.完整代码参考一、Bellman-Ford 算法 是什么?求解单源最短路径问题的一种算法。它的原理是对图进行V-1次松弛操作,得到所有可能的最短路径。其优于Dijkstra 算法的方面是边的权值可以为负数、实现简单,缺点是时间复杂度过高,高达O(VE)。1.特点Bellman-Ford 支持有负权边的存在。同时能检测出图中有没有负权环算法时间复杂度:O(EV) 其中E为边数、V为节点原创 2021-06-06 11:33:16 · 1005 阅读 · 0 评论 -
【C++】【最短路径】Dijkstra 算法实现(迪杰斯特拉算法)【最小索引堆】
Dijkstra一、Dijkstra 算法 是什么?1.特点1.思想二、简易实现1.解读2.完整代码参考一、Dijkstra 算法 是什么?是从一个顶点到其余各顶点的最短路径算法。解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。1.特点Dijkstra 不支持有负权值边的存在。算法时间复杂度:O(ElogV) 其中E为边数、V为节点数。算法的核心其实是relaxation,松弛原创 2021-06-06 09:54:56 · 636 阅读 · 0 评论 -
【C++】【最小生成树】prim 算法实现(普里姆算法)【最小索引堆】
prim一、prim是什么?1.思想二、简易实现1.解读2.完整代码总结一、prim是什么?普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。复杂度分析:E为边数,V为定点数。1.思想使用最小索引堆,且堆大小为节点个数。会及时更新不是横切边的边。遍历当前节点的所有边,看这个边对面的节点。如果对面的没有被遍历原创 2021-06-05 16:05:37 · 1193 阅读 · 0 评论 -
【C++】【最小生成树】KrusKal 算法实现(克鲁斯卡尔算法)。【最小索引堆】【并查集】
KrusKal 一、KrusKal 是什么?1.想法二、简易实现1.代码2.解读参考一、KrusKal 是什么?KrusKal 算法是求连通网的最小生成树的另一种方法。与prim算法不同,它的时间复杂度为O(eloge)(e为边数)。所以,适合于求边稀疏的网的最小生成树。1.想法每次直接在图中,找最小的边。这个最小的边一定最小生成树的一条边。前提是:只要找的边不会使得最小生成树生成一个环。这也是为什么使用并查集的原因。为了使用的边不使得最小生成树构成环。二、简易实现1.代码bobo原创 2021-06-05 09:52:43 · 592 阅读 · 0 评论 -
【C++】剑指offer 23. 链表中环的入口结点(双指针)【链表】//
剑指offer 23. 链表中环的入口结点描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。文章目录剑指offer 23. 链表中环的入口结点一、思路1.代码实现一、思路1. 确定有环:快慢指针,快指针要是追上了慢指针,那么就是有环。2. 确定环长度:快慢指针相遇必定是在环内。从这个节点环回,就是环的长度。3. 确定环入口节点:first 指针从根节点前进环的长度N,然后和second节点一起走,相遇的节点就是入口节点。总长==N+M。M是根节点到环入口节点原创 2021-06-03 12:05:09 · 124 阅读 · 0 评论 -
【C++】剑指 Offer 25. 合并两个排序的链表 (原地合并)
剑指 Offer 25. 合并两个排序的链表文章目录剑指 Offer 25. 合并两个排序的链表一、自己的思路考察的点:提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。一、自己的思路这个题如果面试,应该是要考虑原地合并,否则没有考察的必要。思路很简单,既然原地,那就两个指针往后遍历,换指向就好。实现:实现起来需要多加一个dummyhead,这样就清晰很多,用dummyhead原创 2021-06-02 22:47:13 · 279 阅读 · 0 评论 -
【C++】【二叉树】剑指 Offer 26. 树的子结构 (遍历两棵树)
剑指 Offer 26. 树的子结构文章目录剑指 Offer 26. 树的子结构一、自己的思路二、剑指offer 的做法:1.递归遍历考察的点:总结一、自己的思路既然是子树,那么肯定是A包含B进去的。那么就可以遍历A 的时候,找到了和B根节点一样的节点。就开始遍历B节点,同时将A节点做同样的遍历:如果A节点没跟上,就说明:当前A节点向下不包含B树。如果B树都遍历完了,说明A树包含了B树。上面当前A节点向下不包含B树时,需要退出,继续遍历A树,循环往复下去。代码:/** *原创 2021-06-02 22:37:43 · 236 阅读 · 0 评论 -
C++ 类内重载输出运算符、类外重载输出运算符的区别;及其调用区别;operator<<
目录前言一、类内与类外重载运算符1.类内重载与类外重载的区别2.类外重载为什么需要友元关于模板类3.类内重载与类外重载,调用的区别二、实例实现效果:参考前言最后的实例利用一个模板类来实现类内与类外重载输出运算符。其他运算符的重载类似。如果不需要模板,去掉模板即可。一、类内与类外重载运算符1.类内重载与类外重载的区别1.1类外重载一般需要类内声明友元,详见2.1.2类内实现,调用的时候需要用对象调用,参数列表只包含一个ostream类引用。1.3类内,作为成员函数,所以没有友元声明一说。原创 2021-05-13 12:05:47 · 2646 阅读 · 0 评论 -
char* char;基本类型的new、delete与malloc、free;delete 与free结束应该置NULL;
目录前言一、重点直出:1.new与delete2.malloc与free二、更多细节参考前言new与malloc 的细节;一、重点直出:对应关系如下:1.new与deletechar* temp2 = new char;delete temp2;temp2 = NULL;char* temp2 = new char[50]{'1'};delete []temp2 ;temp2 = NULL;初始化是为了后面都带上’\0’;否则是乱的数据,后面在结尾需要自己加上’\0’。原创 2021-05-10 16:14:00 · 2068 阅读 · 0 评论 -
c++ :cout输出变量的地址,输出string 、char*的地址,即输出字符串首地址;cout与printf;void*的作用。
目录前言一、pandas是什么?1.1cout与printf二、实例1.示例2.printf 的输出类型参考前言char m_char[20] = "temp";char *ptr_char= m_char;对于m_char的地址或者ptr_char指针的值怎么输出呢?一、pandas是什么?对于指针变量来说, (void*)取到的是指针值,也就是目的地址,而&取到的是指针变量的地址。**char m_char[20] = "temp";**对**m_char**来说,(v原创 2021-05-09 22:17:09 · 4847 阅读 · 0 评论 -
c++重载i++与++i;重载i--与--i;即operator++()与operator++(int);递增++递减--运算符重载
目录前言一、理解二、实现总 结参考前言递增运算符( ++ )和递减运算符( – )是 C++ 语言中两个重要的一元运算符。其实觉得设计的有点鸡肋。。。一、理解首先 i++是不能对其取地址的。因为i++返回的是一个右值。关于左值右值可以看看:–左值与右值–理解为++i 操作完返回了i 的引用。而i++操作完返回的是操作之前的临时变量。二、实现最简单的实现,实验调用机制:int 在 括号内是为了向编译器说明这是一个后缀形式,而不是表示整数。class fake_int{ void原创 2021-05-07 23:21:43 · 1882 阅读 · 0 评论 -
C++模板类;友元重载operator<<,使其也具有泛型特性; 非成员重载运算符的模板。
目录前言实例效果参考前言实现的模板类中,如果要打印输出实时的私有成员内容,重载operator<<就可并设为友元即可。operator<<也需要泛型,就将其也做成模板函数,再在类外实现即可。实例代码如下(示例):用栈实现一个队列,队列是私有的。这个类是模板类。通过设定友元,使得(非成员重载运算符operator<<)能够访问到对象中私有成员。template<typename TT>class MyQueue {private: s原创 2021-05-07 16:19:15 · 1351 阅读 · 0 评论 -
C/C++函数指针及其使用;函数的地址;函数指针数组;成员函数作为指针;
文章目录前言函数指针对用户的意义是什么?一、函数指针?1.1获取函数的地址1.2声明函数指针1.2.1方法一1.2.2方法二 typedef1.3使用函数指针调用函数1.3.1方法一1.3.2方法二二、示例2.1方法一2.1方法二扩展参考前言c语言就有实现函数指针,C++兼容C,C++使用C的函数指针没有问题。函数指针对用户的意义是什么?函数的地址可以传给另一个函数,实现一个函数调用另一个函数的做法,实际上,我们经常使用。不同阶段传入不同的函数地址可以实现:不同时间调用不同的函数。一、函数指原创 2021-05-06 10:27:34 · 994 阅读 · 0 评论