領域を固定パターンで埋める memfill
ある値で int 配列を埋めたい、構造体配列を初期化したい、なんて要求はざらにあるような気がするのだけれど、標準ライブラリーにはいってないのはなぜなんだぜ?
見たとおり、速度は O(log nmemb)。
void* memfill(void *ptr, const void *data, size_t size, size_t nmemb) { char *const head = ptr; if (nmemb > 0) { size_t n; memcpy(head, data, size); for (n = 1; 2*n < nmemb; n *= 2) memcpy(head + n * size, head, n * size); memcpy(head + n * size, head, (nmemb - n) * size); } return head + size * nmemb; }
戻り値は埋めたメモリー領域の末尾のひとつ向こう。続けて操作をしたいときだとかに便利だし、あと STL の標準アルゴリズムを真似したいというのがあってだね。