摘要: 简介 Substitution Failure Is Not An Error(匹配失败不是错误) 由于类型推断而引起的替换失败不会立刻引起编译错误,而是会进行一个类似于“编译期重载”的操作 SFINAE使得C++可以在编译期进行一些方法的重载,这个是运行期0开销的,匹配失败的方法直接就不编译 需要 阅读全文
posted @ 2020-07-15 11:34 joeyzzz 阅读(385) 评论(0) 推荐(1) 编辑
摘要: 某种类型的可能有的四种swap std提供的标准版本(基于副本的交换) 用户自己全特化的std版本(基于impl的交换) 针对于类型的member版本 针对于类型的non-member版本(可能处于自己的命名空间里,调用member版本的swap) 手法如何应用? namespace ns { // 阅读全文
posted @ 2020-07-07 15:26 joeyzzz 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 先吐槽一句 或许STL的设计者认为API的一致性很重要,函数名短而美很重要,人的脑容量不重要…… 容器分类 连续内存容器(vecotr、deque、queue、string) list(没错,不一样的烟火就是你了) 标准关联容器(set、multiset、map、multimap) 连续内存容器(v 阅读全文
posted @ 2020-04-15 16:04 joeyzzz 阅读(848) 评论(0) 推荐(0) 编辑
摘要: gdb -tui(必备啊有木有) gdb在下断点的时候可以直接下函数名,如 b elaine::Logger::Log 也可以很方便的通过文件名下断点,比如b log.c:25就是指在log.c文件的第25行下断点 要使用gdb调试CMake生成的文件,需要加上这几项:SET(CMAKE_BUILD 阅读全文
posted @ 2020-04-14 17:35 joeyzzz 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 对象分配到堆上的过程:三个形式的new 要把对象分配到栈上,需要使用到 new operator ,而new operator会调用 operator new 和 placement new 。 operator new用于调用malloc申请堆空间,如果申请失败会抛出bad_alloc异常 pla 阅读全文
posted @ 2020-03-24 13:25 joeyzzz 阅读(520) 评论(0) 推荐(0) 编辑
摘要: 引言 关于标准库的sort的实现,各种贴子文章看得人眼花缭乱,还是看code吧。本文代码取自Ubuntu 18.04自带的GNU STL。(个人觉得MSVC版本的STL可阅读性并不是那么好) std::sort std::sort经过一些必要的检查后调用了std::__sort并且指定了默认的比较器 阅读全文
posted @ 2020-03-21 15:51 joeyzzz 阅读(920) 评论(0) 推荐(0) 编辑
摘要: 小和问题 题目描述 在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。 实例 对于数组[1,3,4,2,5]: 1左边比1小的数,没有; 3左边比3小的数,1; 4左边比4小的数,1、3; 2左边比2小的数,1; 5左边比5小的数, 1、 3、 4、2; 所以小 阅读全文
posted @ 2020-03-18 23:30 joeyzzz 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 题目描述 对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度(假定排序后为升序)。 给定一个整数数组A及它的大小n,请返回最短需要排序的子数组的长度。 测试样例: [1,5,3,4,2,6,7],7 返回:4 思路 可以从序列的单调性入手,对于任何一个有序单增序列,从右往左扫描得到的 阅读全文
posted @ 2020-03-17 15:51 joeyzzz 阅读(199) 评论(0) 推荐(0) 编辑
摘要: friend(友元)可以干什么 修饰对象之一:类 假如B是A的友元,B的成员函数可以访问A的 所有成员 ,包括protect和private成员变量和成员函数,示例: class A { friend class B }; 修饰对象之二:普通函数 普通函数F是A的友元函数,则这个普通函数可以访问A的 阅读全文
posted @ 2020-03-06 21:24 joeyzzz 阅读(474) 评论(0) 推荐(0) 编辑
摘要: 一个通用的运算符重载助记公式 哑参数 在后置一元运算符的重载函数声明中,int只起到区分前置后置的作用,没有什么实际效果,称为“哑参数” 操作符重载的返回值 所有的操作符的重载函数的返回值都没有指定,编译器会根据实际的代码来进行上面所声明的运算符的 匹配调用 ,如: 所以这里的操作符重载的返回值可以 阅读全文
posted @ 2020-03-04 12:29 joeyzzz 阅读(284) 评论(0) 推荐(0) 编辑