for_each

C++11引入了range for loop,可是range for loop只能拿到向前range的元素,而没法取得循环的当前下标。

Read More

cpo和tag_invoke

customization point object(cpo)和tag_invoke由eric niebler提出,在ranges和executor中有很多应用。 cpo可用于对库中的一些仿函数进行定制,而tag_invoke用于实现cpo,用于用户的类区分对于不同库的定制。

Read More

intrusive list

介入式容器的 元素的生命周期由元素自身管理而不是由容器管理。 folly 提供了IntrusiveList和CountedLinklist,是boost instrusive_list的一些alias,能覆盖大部分使用场景。

Read More

token bucket

令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。它可以用来限制发送到网络上的数据的数目,并允许突发数据的发送。

Read More

有序数组循环后如何复原为有序

有序数组A如{1,2,3,4,5,6},循环后,变为B:{3,4,5,6,1,2},假定我们并不知道partition point,也就是不知道循环后原来的数组首元素如1在循环后数组B中的位置,那么如何复原为原始有序数组A:{1,2,3,4,5,6}呢?

Read More

type erasure

type erasure相比于经典的基于继承实现的运行时多态,有一大优点,接口类和实现类不再需要是基类和派生类的关系。 Type erasure有两个特点

Read More

the detect idiom

考虑这么一个需求,我们需要判断一个类是否有嵌套的iterator typedef,比如vector<int> 有vector<int>::iterator typedef,而std::optional<int>没有嵌套的iterator typedef。我们如何检测呢? 使用detect idiom 首先定义一个alias 模板

Read More