Hatena::Grouptopcoder

TopCoder煮ブログ

本家ブログはこっち → http://d.hatena.ne.jp/nitoyon/

2008-10-19

memset と std::fill

| 00:14 | memset と std::fill - TopCoder煮ブログ を含むブックマーク はてなブックマーク - memset と std::fill - TopCoder煮ブログ

memset はバイト単位で値を設定する。int の配列や double の配列を特定の値で初期化する場合は、std::fill を用いるべし。

// 0 はうまくいく
int A[10];
memset(A, 0, sizeof(A));
// A[0] -> 0
// A[1] -> 0

// が、1 は意図しない結果に
memset(A, 1, sizeof(A));
// A[0] -> 16843009 (=0x01010101)
// A[1] -> 16843009 (=0x01010101)

// そういう時は std::fill
fill(A, A + 10, 1);
// A[0] -> 1
// A[1] -> 1

fill の第二引数は最後の要素 + 1の場所を指定する。vector などの end() と同じ扱い。