C++
自动小哥
这个作者很懒,什么都没留下…
展开
-
关于git submodule的使用以及注意事项
submodule项目和它的父项目本质上是2个独立的git仓库。只是父项目存储了它依赖的submodule项目的版本号信息而已。如果你的同事更新了submodule,然后更新了父项目中依赖的版本号。你需要在git pull之后,调用 git submodule update来更新submodule信息。这儿的坑在于,如果你git pull之后,忘记了调用 git submodule update,那么你极有可能再次把旧的submodule依赖信息提交上去。对于那些习惯使用 git commit -a的人来原创 2021-10-22 01:50:19 · 913 阅读 · 0 评论 -
std::move std::forword
https://www.cnblogs.com/keepsimple/p/3250245.html转载 2021-10-02 00:01:09 · 203 阅读 · 0 评论 -
使用Valgrind检测C++内存泄漏
详细介绍:http://senlinzhan.github.io/2017/12/31/valgrind/Valgrind可以检测内存泄漏、访问越界、未初始化内存等转载 2020-07-12 21:23:45 · 115 阅读 · 0 评论 -
mtrace检查内存泄露
mtrace内存泄漏检测:1.安装mtrace命令:yum install glibc-utils2.代码:#include <stdio.h>#include <string.h>#include <stdlib.h>/* mtrace 头文件 */#include <mcheck.h>int main(int argc, char *argv[]){ /* 设置环境变量, mtrace保存位置 */ set转载 2020-07-12 21:14:09 · 319 阅读 · 0 评论 -
Effective C++学习笔记(十四) 定制new和delete(一)及杂项
条款 49 了解new-handler行为static成员必须在class定义之外被定义(除非它们是const而且是整数型)set_new_handler允许客户指定一个函数,在内存分配无法获得满足时被调用Nothrow new是一个颇为局限的工具,因为它只适用于内存分配;后继的构造函数调用还是可能抛出异常条款 50 了解new和delete的合理替换时机有许多理由需要写个自定的new和delete,包括改善效能、对hea运用错误尽行调试、收集heap使用信息。齐位的概念:很多计算机体系结构要原创 2020-07-11 16:46:09 · 92 阅读 · 0 评论 -
在main函数之前和在main函数之后执行的函数
摘要:我们知道 C++ 的全局对象的构造函数会在 main 函数之前先运行,其实在 c 语言里面很早就有啦,在 gcc 中可以使用 attribute 关键字指定如下(在编译器编译的时候就绝决定了)//在 C 语言中 用 __attribute__ 关键字#include <stdio.h>void before() __attribute__((constructor));void after() __attribute__((destructor));void before()转载 2020-07-10 17:30:42 · 290 阅读 · 0 评论 -
Effective C++ 学习笔记(十三)模板与泛型编程(二)迭代器种类
条款 46 需要类型转换时请为模板定义非成员函数当我们编写一个class template,而它所提供之“与此相关的”函数支持“所有参数之隐式类型转换”时,请将那些函数定义为“class template” 内部的“friend”函数定义于class内部的函数都暗自成为inline函数,包括像定义在内部的friend函数条款 47 请使用traits classes 表现类型信息Traits classes 使得“类型相关信息”在编译期可用,他们以template和“template 特化”完成实现原创 2020-07-10 16:03:04 · 95 阅读 · 0 评论 -
leetcode 第22题 括号生成 (dfs + 回溯)
题目描述:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/generate-parentheses著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题解:class Solution {publ原创 2020-07-10 10:10:31 · 140 阅读 · 0 评论 -
C++智能指针 auto_ptr、unique_ptr、shared_ptr、weak_ptr
C++11智能指针介绍智能指针主要用于管理在堆上分配的内存,它将普通的指针封装为一个栈对象。当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄漏。C++ 11中最常用的智能指针类型为shared_ptr,它采用引用计数的方法,记录当前内存资源被多少个智能指针引用。该引用计数的内存在堆上分配。当新增一个时引用计数加1,当过期时引用计数减一。只有引用计数为0时,智能指针才会自动释放引用的内存资源。对shared_ptr进行初始化时不能将一个普通指针直接赋值给智能指针,因为一个是指针,一个转载 2020-07-10 09:39:39 · 169 阅读 · 0 评论 -
Effective C++学习笔记(十二) 模板与泛型编程(一)
Effective C++学习笔记(十二) 模板与泛型编程(一)条款 41 了解隐式接口和编译期多态以不同的template参数具现化function template 会导致调用不同的函数,这便是所谓的编译期多态。隐式接口并不基于函数签名式,而是由有效表达式组成;class和template都支持接口和多态对class而言接口是显式的,以函数签名为中心,多态则是通过virtual函数发生于运行期。对template参数而言,接口是隐式的,基于有效表达式,多态则是通过template具现化和函数原创 2020-07-08 16:26:58 · 89 阅读 · 0 评论 -
leetcode 第20题 有效括号(栈)
题目描述:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)]”输出: false示例 5:输入: “{[]}”输出: true来源:力扣(LeetC原创 2020-07-08 11:12:04 · 73 阅读 · 0 评论 -
leetcode 第19题 删除链表的倒数第N个节点(指针)
题目描述:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list著作权归领扣网络所有。商业转载请联系官方授权,非商业原创 2020-07-08 10:54:39 · 167 阅读 · 0 评论 -
leetcode 第17题 电话号码的字母组合(dfs+回溯法)
题目描述:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/letter-combination原创 2020-07-08 10:22:05 · 297 阅读 · 0 评论 -
leetcode 第15题 三数之和(指针)
题目描述:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/3sum著作权归领扣网络所有原创 2020-07-08 09:51:05 · 161 阅读 · 0 评论 -
leetcode 第11题 盛最多水的容器
题目描述:给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。来源:力扣(LeetCode)链接:https://leetcode-c原创 2020-07-08 09:14:55 · 112 阅读 · 0 评论 -
leetcode 第10题 正则表达式匹配(递归法判断条件详解)
题目描述:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘’ 的正则表达式匹配。‘.’ 匹配任意单个字符'’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:s = “aa”p = “a”输出: false解释: “a” 无法匹配 “aa” 整个字符串。示例 2:输入:s =原创 2020-07-08 00:50:20 · 154 阅读 · 0 评论 -
C++中虚继承
父类:复制代码代码如下:class CParent{…};继承类的声明比较特别:class CChild : virtual public CParent{…}请问,这个"virtual"是什么作用及含义?表示虚拟继承,和普通继承是C++的两种继承方式。例如B1、B2 继承A 而C多重继承B1、B2如果普通继承则C包含两份A的拷贝,分别来自于B1、B2而虚拟继承则只包含一份A的拷贝这个"virtual"是什么作用及含义?证明这个CParent转载 2020-07-07 16:26:11 · 131 阅读 · 0 评论 -
Effective C++ 学习笔记(十一) 继承与面向对象设计(三)private继承、virtual继承、多重继承
Effective C++ 学习笔记(十一) 继承与面向对象设计(三)条款 38 通过复合塑模出has-a或“根据某物实现出”复合是类型之间的关系,当某种类型的对象内含其他类型的对象时,便是这种关系。复合的意义和public继承完全不同,在应用域,复合意味着has-a(有一个)的关系,在实现域,复合意味着is-implemented-terms-of(根据某物实现出)条款 39 明智而审慎的使用private继承如果class之间的继承关系是private,编译器不会自动将一个derived cla原创 2020-07-07 16:23:07 · 143 阅读 · 0 评论 -
leetcode 第6题 Z字型变换
题目描述将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数string convert(string s, int numRows);示例 1:输入: s = “原创 2020-07-07 12:40:13 · 77 阅读 · 0 评论 -
leetcode 第5题 最长回文子串
题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-substring著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题解:中心扩散和动态规划法原创 2020-07-07 11:03:05 · 88 阅读 · 0 评论 -
leetcode 第三题 无重复字符的最长字串
题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。来源:原创 2020-07-07 10:18:08 · 102 阅读 · 0 评论 -
leetcode 第2题 两数相加(链表)
题目描述:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807来源:力扣(LeetCode)链接:https://le原创 2020-07-07 09:44:31 · 97 阅读 · 0 评论 -
strpbrk,strcasecmp,strncasecmp,strspn,strcspn函数说明
**extern char *strpbrk(char str1, char str2)str1待比较的字符串,str2为指定被搜索的字符串。函数功能:比较字符串str1和str2中是否有相同的字符,如果有,则返回该字符在str1中的位置的指针。返回说明:返回指针,搜索到的字符在str1中的索引位置的指针。strcasetmp():忽略大小写比较两个字符串是否相等,相等返回0。strncasetmp():忽略大小写比较两个字符串前n个字符是否相等,相等返回0。strspn() :函数用来计转载 2020-07-06 14:16:59 · 240 阅读 · 0 评论 -
Effective C++ 学习笔记(十)继承与面向对象设计(二)std::function、std::bind、strategy模式、动态绑定、静态绑定
Effective C++ 学习笔记(十)继承与面向对象设计(二)条款 35 考虑virtual之外的其他选择原创 2020-07-03 16:33:00 · 202 阅读 · 0 评论 -
c++继承关系中的访问控制,子类与父类内部以及对外的访问权限
c++继承关系中的访问控制,子类与父类内部以及对外的访问权限关于继承:子类拥有父类的所有成员变量和成员函数,子类可以拥有父类没有的方法和属性,子类就是一种特殊的父类,子类对象可以当作父类对象使用。不同的继承方式对访问权限的影响:(1)c++中不同的继承方式下,子类的成员对外的访问权限(也就是在程序中一个普通的子类对象的访问权限)1.public继承:父类成员的访问级别原封不动的转移到子类中来;2.protected继承:父类中public和protect成员都变成protected的,priva原创 2020-07-01 17:19:36 · 1308 阅读 · 0 评论 -
Effective C++学习笔记(九)继承与面向对象设计(一)
Effective C++学习笔记(九)继承与面向对象设计(一)条款 32 确定你的public继承塑模出is-a关系注意继承分为public、private、protect继承三种形式,只有public继承表现出“is a”的关系,即子类是一种基类,但是基类不是一种子类。适用于base class身上的每一件事,一定也使用于derived class身上,因为每一个derived class 对象也都是一个base class对象条款 33 避免遮掩继承而来的名称对于一个名称,内层作用域的名称会遮原创 2020-06-30 16:34:41 · 90 阅读 · 0 评论 -
Effective C++学习笔记(八) 实现(二)异常安全、inline
Effective C++学习笔记(八) 实现(二)条款 29 为“异常安全”而努力是值得的在异常抛出时,带有异常安全性的函数会:(1)不泄露任何资源(2)不允许数据破坏copy and swap 策略:修改对象数据的副本,然后在一个不抛出异常的函数中将修改后的数据和原件置换函数提供的“异常安全性保证”通常只等于其所调用之各个函数的“异常安全保证”中的最弱者条款 30 透彻了解inlining的里里外外inline函数的好处在于动作像函数,调用他们又不需要承受函数调用所招致的额外开销,编译器原创 2020-06-30 00:48:12 · 154 阅读 · 0 评论 -
Effective C++学习笔记(七) 实现(一)
Effective C++学习笔记(七) 实现(一)条款 26 尽可能延后变量定义式的出现时间你不止应该延后变量的定义,知道非得使用该变量的前一刻为止,甚至应该尝试延后这份定义直到能够给它初值实参为止。另外,拷贝构造比default构造+赋值构造往往要高效些;对于循环来说,选择将变量定义在循环内还是循环外:考虑两点:(1)你知道赋值成本比“构造+析构”成本低(2)你正在处理代码中效率高度敏感的部分否则,应该选择在循环内定义变量条款 27 尽量少做转型动作旧式转换:(T)expression原创 2020-06-23 17:19:13 · 54 阅读 · 0 评论 -
Effective C++学习笔记(六) 设计与声明(二)
Effective C++学习笔记(六) 设计与声明(二)条款 23 宁以non-number、non-friend替换member函数使用non-number 与 non-friend 函数,没有增加封装类的可访问性,friend函数和member函数对class private成员的访问权限相同,因此二者对封装的冲击力道相同。namespace 和class不同,前者可跨越多个源码文件而后者不能。这里要视情况而定,看是要增加一个什么样的函数,不能只增加非成员函数,而忘记了封装的本性。条款 24原创 2020-06-22 17:12:25 · 120 阅读 · 0 评论 -
C++类中对同类对象private成员访问
私有成员变量的概念,在脑海中的现象是,以private关键字声明,是类的实现部分,不对外公开,不能在对象外部访问对象的私有成员变量.然而,在实现拷贝构造函数和赋值符函数时,在函数里利用对象直接访问了私有成员变量,因而,产生了困惑.下面以具体实例进行说明:疑惑:为什么第26行和第32行代码可以编译通过,而第39行和第40行代码会产生编译错误?class CTest {public:CTest(int i);CTest(const CTest& rhs);CTest& operat转载 2020-06-22 16:23:43 · 704 阅读 · 0 评论 -
Effective C++学习笔记(五)设计与声明(一)
Effective C++学习笔记(五)条款 18 让接口容易被正确使用,不易被误用促进正确使用的方法包括接口的一致性,以及与内置类型的行为兼容阻止误用的办法包括建立新类型、限制类型上的操作、束缚对象值,以及消除客户的资源管理责任(shared_ptr)关于shared_ptr:它提供的某个构造函数接受两个实参:一个是被管理的指针,另一个是引用次数变为0时被调用的删除器,例如://建立一个NULL shared_ptr并以getRidOfInvestment作为删除器shared_ptr<原创 2020-06-21 17:21:54 · 89 阅读 · 0 评论 -
Effective C++学习笔记(四)资源管理、内存泄漏
Effective C++学习笔记(四)条款 13 以对象管理资源使用了资源后就一定要归还给系统,比如内存资源,如果不归还就会造成内存泄漏。就是依赖析构函数自动调用的机制,归还资源。使用RAII机制,在对象的构造函数中获得资源,在析构函数中释放资源。两个管理指针的类:(1)auto_ptr若通过copy构造或者copy赋值复制他们,他们自身会变成NULL,而复制所得的指针将得到资源的唯一拥有权。即只会有一个指针指向一片资源(2)shared_ptr引用计数型智慧指针,它持续追踪共有多少个对象原创 2020-06-20 17:34:39 · 270 阅读 · 1 评论 -
Effective C++ 学习笔记(三)析构函数、拷贝构造函数、拷贝赋值构造函数
Effective C++ 学习笔记(三)条款08 别让异常逃离析构函数在C++中,不要尽量不要让析构函数中可能会抛出异常,会导致过早结束程序,或发生不明确的行为。(1)析构函数决定不要吐出异常,如果一个被析构函数调用的函数抛出异常,析构函数应该捕捉异常,然后吞下他们(不传播)或结束程序。(2)如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么class应该提供一个普通函数(而非在析构函数中)执行该操作条款 09 绝不在构造和析构过程中调用virtual函数原因:(1)如果在构造函数中原创 2020-06-18 00:45:59 · 138 阅读 · 0 评论 -
Effective C++学习笔记(二) 各种构造函数 虚继承 虚基类 抽象类 多态
Effective C++学习笔记(二)条款05 了解默默编写并调用那些函数编译器会为每一个类自动生成一个拷贝构造函数、赋值构造函数、和析构函数,并且在被用到的时候,这些函数才会生成。如果没有声明任何的构造函数,编译器也会为你自动生成一个默认构造函数当类中含有reference或者const成员时,要自己写赋值构造函数,编译器不会自动生成另外如果基类将赋值构造函数声明为了private,那么编译器不会为其派生类自动生成赋值构造函数条款06 如不想使用编译器自动生成的函数,就该明确拒绝为了驳回编译原创 2020-06-16 21:15:02 · 132 阅读 · 0 评论 -
Effective C++学习笔记(一)const、enum、inline、const_cast、初始化对象
Effective C++学习笔记(一)条款01:视C++为一个语言联邦c++可以看成是由四个次语言组成的即:C、Object-Oriented C++、Template C++、STL。对于内置类型而言,pass-by-value通常比pass-by-reference更加高效,但对于用户定义的类,由于构造函数和析构函数的存在,pass-by-reference-to-const 往往更好条款02:尽量以const、enum、inline替换#define使用常量替换宏,宏定义在被编译器看到之前原创 2020-06-16 16:37:36 · 128 阅读 · 0 评论 -
volatile修饰符
volatile修饰符从词面上讲,volatile的意思是易变的,也就是说,在程序运行过程中,有一些变量可能会被莫名其妙的改变,而优化器为了节约时间,有时候不会重读这个变量的真实值,而是去读在寄存器的备份,这样的话,这个变量的真实值反而被优化器给“优化”掉了,用时髦的词说就是被“和谐”了。如果使用了这个修饰词,就是通知编译器别犯懒,老老实实去重新读一遍!可能我说的太“通俗”了,那么我引用一下“大师”的标准解释: volatile的本意是“易变的” 。 由于访问寄存器的速度要快过RAM,所以编译器一般都会作转载 2020-06-03 20:07:56 · 174 阅读 · 0 评论 -
C++知识点笔记(二)
C++知识点笔记(二)C++类内内存布局https://www.cnblogs.com/hnfxs/p/5395015.htmlC++构造函数声明为explicit:https://www.cnblogs.com/lucy-lizhi/p/6537986.htmlhttps://www.cnblogs.com/xzxl/p/7755152.html原创 2020-06-03 16:35:54 · 58 阅读 · 0 评论 -
偷偷给女朋友写了一个计算初试复试成绩的代码,嘻嘻嘻嘻
哈哈哈哈#include<iostream>#include<string>#include<fstream>#include<algorithm>#include<stdlib.h>#include<cstdlib>#include<vector>#include<math.h>using namespace std;static bool cmp(const pair<long原创 2020-05-28 14:33:21 · 103 阅读 · 0 评论