c++
rtti
- typeid(lvalue) -> type_info
decltype auto
move
template <typename T>
typename remove_reference<T>::type&& move(T&& t)
{
return static_cast<typename remove_reference<T>::type&&> (t);
}
- 模板的折叠, 让move, 可以接收左值和右值
- remove_reference的多个模板, + 模板参数推导, 抽离出不含引用的类型
- static_cast, 允许(右->左值)的强制类型转换
shared_ptr
- stl中, 计数器是atom, 故内存释放是线程安全的
- 指针无任何保护, 多线程读写不安全
- 为避免循环引用, 引入了weak_ptr, 不计数, 尝试持有ptr
class CA { shared_ptr<CB> m_p }; class CB { shared_ptr<CA> m_p };
虚表
- 类的虚表, 编译时就确定了.
- 虚表的指针, 位于对象的开头.
算法
空间和时间, 是永恒的主题
双指针
快慢指针
左右指针
滑动窗口
框架:
1. left = right = 0, 左开右闭
2. 不断增加right, 直到符合要求
3. 转而增加left, 知道不符合要求
滑动窗口
二分搜索
左右开闭
收缩区间, 依据判断条件
动态规划
随笔
先暴力找出答案;
dp数组有一些规律模板
共有几个状态
穷举状态迁移
找出重叠问题
优化状态迁移, 去除不必要的子问题
随笔
- 放不放的选择, 比放几个的选择要好
- 边界问题, 最好抽象出来, 大不了用num[i - 1]
- 在递归中, -1, 可以替代循环无数次
- 乘法的边界时sqrt(n)