使用智能指针的默认行为来避免内存泄漏
2016年的 cppcon 上,Herb Sutter 的演讲中提出了一些关于常用的数据结构如何使用智能指针自动的构造和析构来避免内存泄漏的情况发生。 可以在这里找到这个演讲的链接:https://youtu.be/JfmTagWcqoE。
Python元编程 - 在Python中实现重载
避免重复的代码,避免复制粘贴一些逻辑的时候,我们使用了函数。那么避免复制粘贴定义一些类似的,或者较为相像的类的时候,我们就需要一个生成类的方法,在Python中,我们使用的方法就是元类(MetaClass)。
C++ 中的类型推导
auto 的基本使用
auto
关键字被在变量声明或者作为函数返回值的占位符,在这两个位置的使用是可以通过单个等号右边,或者函数调用来确定 auto
具体应该成为什么类型的,比如像下面这样:
auto iter = map.begin();
template<typename T, typename U>
auto func(T a, U b) -> decltype(a + b);
在 CLion 中配置 gtest
最近在学习 googletest 这个用于 C++ 的单元测试框架的时候,遇到了一个问题。就是希望可以在 CLion 中配置好一个制定项目的测试,然后由 CLion 运行并且给出一个结果。 结果当然是成功了的,这篇文章主要就记录一下整个配置的过程,配置过程整体很简单,主要就是写 CMakeLists.txt 的过程(因为 CLion 使用 CMakeLists 管理整个 C++ 的项目)。
项目目录结构
+ project_home
+ ext // external library
+ gtest // google test framework
- CMakeLists.txt
+ include // project headers
+ src // project source files
+ test // test files
- CMakeLists.txt
Two Ways Algorithm
Two Ways Algorithm 是一个用于字符串匹配的算法,算法类似 KMP 会返回所有 pattern 出现在 text 里的位置。但是和 KMP 不同的是 two ways algorithm 只使用常数大小的额外空间。
算法使用 \(O(m)\) 的时间预处理,并且可以在 \(O(n)\) 时间完成匹配,在最差的情况下会遍历 text 串两次。