Template
成员模板( Member Template ) C++ 模板, 除开较为常见的 class template 和 function template, 还有一种 member template. 它被大量运用在继承关系的构造函数中, 以实现通过派生类的拷贝构造基类函数. // class template template <class T1, class T2> struc...
成员模板( Member Template ) C++ 模板, 除开较为常见的 class template 和 function template, 还有一种 member template. 它被大量运用在继承关系的构造函数中, 以实现通过派生类的拷贝构造基类函数. // class template template <class T1, class T2> struc...
仿函数( Functor ), 就是一个像函数的类, 其中必须重载实现 operator() ( operator call ), 以下用 STL 中的 less 举例. template< class Arg1, class Arg2, class Result> struct binary_function { typedef Arg1 first_argument...
简介与基础知识 转换函数常用于将一个类转换为另一个类, 具有与一般函数不同的声明注意事项, demo 如下: class frac { private: int numer; int deno; public: operator double() const { return (double)(numer / deno); } frac(int nu, i...
继承( Inheritance ) 虚函数常用于继承之中, 在父类中的函数种类如下: 纯虚函数: 父类中未给出默认定义, 子类必须重写 当一个父类足够抽象时, 它完全无法预测子类在某些情况下的行为, 此时这些行为应当被父类设计为纯虚函数 虚函数: 父类中给出默认定义, 子类尽量重写. (你要是希望子类无需重写何必设计成虚函数呢? 用非虚函数...
起因, Leetcode 1206. 设计跳表, 愣是没通过题目给的动图看懂搜索过程, 遂学之 基本思想 看图! 同一个结点之间, 从高层至低层有连接. 查找, 插入, 删除的时间复杂度都是 $O(\log{n})$, 时间期望与红黑树一样, 不过跳表是有序链表的改进, 而非二叉树. 有序链表的查找时间复杂度显然 $O(n)$, 但跳表引入了分层. 最底层是初始有序链表, 定义位...
static member data 在变量名前加 static 关键字, 使得该变量变为静态变量. 变量存储在全局数据区而非堆栈, 不会随着所在域(函数或成员)的消亡而消亡. // 常见于 Leetcode 题目中用于取余的值 static constexpr int MOD = 1e9 + 7; 若在成员变量前修饰, 则该成员变量在全局域中只有一份. 应用场景通常为多个成员共享同...
我以为我懂了, 实际没总结我就不懂. 当然, 我以为我总结了我就应该懂了, 实际我不知道我懂没懂. ——废话大师本人 起因Leetcode 2334. 元素值大于变化阈值的子数组, 周赛这道无从下手, 根本看不出是并查集. 当然后来第一反应应该是双指针 + 单调栈(?), 但实际单调栈也没怎么看出. 总而言之, 先总结一下并查集 朴素并查集大致思想 一个森林结构支持查找与合并,...
Java自带一套 Memory Collection, C++ 没有, 了解一下内存分配与回收还是挺重要的. 毕竟旁观室友面 Java 岗, 真的是一直问这个. 基础知识 局部对象(local member), 内存在栈上, 随着作用域消失而消失回收 全局对象(static member), 内存在堆上, 随着整个程序结束而消失回收 内存分配 内存分配过程如下, 总是先分...
想到哪写到哪, 杂乱 const 修饰成员函数 一个常见的情形如下: // 声明一个 const 类, 并输出其数据 const T m1; cout << m1.data(); 一个容易令人忽视的地方在于, 成员函数 member.data 的设计会漏写 const, 从而导致类型无法转换的报错( 指针引用转为 const 指针 ) // 隐式参数 const me...
大致思想, 一颗 n 叉树, 从根结点至一个合法结点的路径所构成的字符串为该合法结点所代表的字符串. 其中 n 为树存储的字符集大小. 结点定义 就普通多叉树的结点定义, 在此基础上增加一个标记用来判断当前结点是否合法( 构成字符串 ) struct node { bool isEnd; vector<node *> child; node(int ...