https://www.gravatar.com/avatar/932f1b40c8d0202ce03a0df412bfb0ff?s=240&d=mp

chaomai's Odyssey

Happens-before

取自preshing博客上的几篇文章(123)。除了部分翻译外,还有自己的理解。

Happens-before关系

假设A和B两个操作是由多线程程序执行的,如果A happens-before B,那么A对内存的操作在B被执行前对执行B的线程切实可见。

C++ Copy Elision

在写代码是发现拷贝构造函数有时候没有调用,想起C++ Primer中提到过

the compiler can omit calls to the copy constructor.

后来查到是发生了copy elision。

首先有那么一个类定义,其中静态成员c是对象编号。

Single Number

Single Number I

问题:给定一个数组,除了其中一个数出现一次,其他数都出现了两次,找到这个数。

最简单的办法用莫过于用map统计每个数出现的次数,但这除了需要遍历数组外,还需要遍历map,且需要O(n)空间。

home is our world

临近春节,想起了前两个月重温的游戏,HomeWorld。

2008年,高中时,我首次接触到了HomeWorld 2,游戏的画面和操作深深的震撼我。这个游戏是首个完全的3D RTS、视角能够3D旋转、舰船可以在空间中任意移动,不限于一个平面、舰船精细的建模和纹理,这些让我很长时间都沉浸在游戏当中。

素数相关问题及算法

试除法

根据素数的定义,对于自然数$n$,只要能够找到除了1和它本身以外,能够整除该数的正整数,那么它就不是素数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
bool isPrime(int n) {
    if (n <= 1) {
        return false;
    }

    for (int i = 2; i <= n; ++i) {
        if (n % i == 0 && i != n) {
            return false;
        }
    }

    return true;
}

又因为,如果$d$是$n$的约数,那么$n=d \times n/d$,故$n/d$也是,且$\min{d, n/d} \leq \sqrt{n}$,

C++虚函数

C++中有编译时多态和运行时多态,运行时多态是由虚函数实现的。虚函数是用过虚函数表(vftable,virtual function table)来实现的,这个表包含了这个类的虚函数地址,解决了继承、覆盖。当使用父类指针来操作一个子类对象的时候,通过子类对象的虚函数表指针(vfptr,virtual function table pointer)找到子类的vftable,进而找到应该调用的函数。