在使用时发现 memset
和 fill
函数有异同,为了防止考试的时候挂分,专门了解了一下。
memset
函数
由于 memset
的底层实现是类似二进制实现的字节赋值,只能赋为 \(0\),\(1\), \(INF\) 或 \(-INF\),有比较大的局限性。
举个例子:
\(int\) 类型有 \(4\) 个字节,每个字节有 \(8\) 个数字,一个字节一个字节赋值
如:
[0000000 00000000 00000000 0000000]
比如说 memset
设置为 \(1\)
那么就是
[000000100000001000000010000001]
使用 memset(a, 0x3f, sizeof(a));
将数组初始化为无穷大。
虽然也可以使用 \(\texttt{0x7F}\) 但是我们并不推荐,因为在做加法的时候,这个数组的数据容易溢出。相反,使用 \(\texttt{0x3F}\) 则可以保证在 \(1e9\) 的范围内不会加法运算溢出。
在实际使用中总会觉得 memset
慢了,不如手动。