11 2021 档案
摘要:单例模式要注意两点: 通过一个Instance方法,得到类型唯一的实例 屏蔽掉外部创建类型实例的方法 有两种实现思路: 在Instance函数内部使用static声明变量,使其具有唯一实例 在cpp文件中定义全局static指针,并在Instance函数初始化一次 对于屏蔽外部的实现,只需将构造函数
阅读全文
摘要:C++标准目前没有提供分割字符串的方法,但可以自己实现之。 测试代码如下: #include <vector> #include <string> #include <iostream> std::vector<std::string> Split(const std::string& str, c
阅读全文
摘要:C++的前置声明可以避免编译依赖,以此可以增加编译速度。同时可以隐藏实现细节,令接口更加简洁。 那么C++中可以有哪些前置声明的方式呢? 声明全局作用域中类型的名字 声明命名空间中类型的名字 声明模板类型名字 当然,还有函数的前置声明,但函数声明太过于常见就不列举。 注意,我没有找到内嵌类型的前置声
阅读全文
摘要:今天游戏出了一个BUG,复盘一下。这是一个分布式背包系统,A玩家和B玩家共享着一个背包。A玩家和B玩家的角色背包系统在同一个进程里,而共享背包系统在另一个进程(很可能还是另一台物理机)。因此操作背包就是一个相对耗时的操作。 比如想要从角色背包里面放物品到共享背包,就需要经过这样的流程(可能的设计):
阅读全文
摘要:简介 mkdocs 是一款在线文档生成工具,可以生成比较漂亮的在线文档。比如我个人的C++笔记就是用它生成的:https://demon90s.github.io/CppStudy/ 其实 mkdocs 功能就是把一堆 markdown 文档生成成一些 html 的静态页面。 mkdocs 的官网是
阅读全文
摘要:工作中想要写一个工具,但需要知道机器的IP地址。查了下,没有发现什么好的接口可以直接获取。 我的机器就一个IP,其他的是虚拟机的。使用 ipconfig 可以列出它们。但我需要知道的就是如同 192.168.10.111 这样的一个字符串,不需要其他的信息。 于是自己写了一个,这个程序不是跨平台的,
阅读全文
摘要:如何使用 shell 脚本获取随机值? 方法是使用 $RANDOM 变量。每次使用它后,它的值就变成另一个随机值。 echo $RANDOM 如果想获得一个可控的范围内的值,比如 [0, 100) 。则可以 n=$(( $RANDOM % 100 )) echo $n
阅读全文
摘要:mingw提供了一些unix下的工具,使其可以在widows下运行,比如gcc。 首先下载: https://sourceforge.net/projects/mingw/files/Installer/ 或 ftp://lovemiemie.xyz/pub/install_package/wind
阅读全文
摘要:间而言之,restrict关键字修饰一个指针,并告诉编译器,它不会和其他指针指向同一个地址,从而让编译器优化代码。 例如,有如下函数签名: int foo(int *a, int *b); 通常,a和b指向不一样的地址,但也是有可能指向一样的地址。那么对于这样的代码: int foo(int *a,
阅读全文
摘要:C++11提供了 chrono 库,我们可以用它提供的工具来衡量代码的运行时间。我总结了三种方式。 首先,最简单的方法就是在测试代码运行前记录一个起始时间,再测试代码运行完毕后再用当前时间减去起始时间,就得到了测试代码的运行时间。 即:代码运行时间 = 运行后的时间 - 运行前的时间 于是可以有下面
阅读全文
摘要:今天阅读书籍,上面写了一句话,“得到一个空指针,继续调用成员函数会导致程序崩溃”。 这句话似乎写的比较草率。我在实践中有过空指针调用成员函数不崩溃的情况,当然,用空指针去调用成员函数,肯定是不合理的。只不过,不一定会崩溃。 比如: class A { public: void func(bool a
阅读全文
摘要:如果想使用字符串做map的key,通常使用stdstring,但使用stdstring可能会存在一个内存分配的过程。比如有如下查询: m.find("key"); 首先会从"key"构造一个std::string,然后再应用查询。 内存分配的开销是比较大的,那么可以使用const char*去避免吗
阅读全文
摘要:我在开发中写出一个崩溃的代码,当使用 std::sort 排序时,没有定义严格弱序的 operator< ,导致了崩溃。 排序比较的是一个数组,起初的写法是: // 错误的写法 bool operator<(const Foo &rhs) const { for (int i = 0; i < LE
阅读全文
摘要:标准库函数 std::random_shuffle 提供了一个洗牌功能,但是参数只能是随机迭代器。vector可以,但list不行。 那么如何对list进行洗牌呢?一个比较简单的方法就是先从list构造一个临时的vector,对此临时的vector进行洗牌,然后再把洗牌后的vector复制回原来的l
阅读全文
摘要:如果使用 mklink 创建应用程序的快捷方式,很可能不能正常运行。因为应用程序有一个比较特殊的属性:运行目录(working directory)。而 mklink 不能设置这个属性。 我查了一下,网上有一个工具 XXMKLINK , 它可以完成这样的功能,解决了这一问题。 我把它存放在:ftp:
阅读全文
摘要:有些容量特别的文件夹,用鼠标点击删除后,删除的速度会非常慢。 我尝试了下使用 git bash 里面的 rm 工具删除,速度会快上很多。但是缺点是不会放入回收站,删除后,文件会永久丢失。
阅读全文