容器填充函数fill和memset对比总结
文章目录
- 1、fill() 按元素填充
 - 2、memset() 按字节填充
 - 3、对比
 
1、fill() 按元素填充
- 用于将容器或数组的指定范围内的元素赋值为指定值(按元素类型填充)。
 - 属于 C++ STL 算法(
<algorithm>头文件)。 
// 从起始地址到结束地址的下一位置全部赋为目标值
fill(起始地址, 结束地址下一位, 值);fill(a, a + n, -1);  // 一维数组
fill(a[0], a + n * n, -1);  // 二维数组
fill(vec.begin(), vec.end(), -1);  // 动态数组
 
2、memset() 按字节填充
- 用于将一块内存的每个字节设置为指定的值(按字节填充)。
 - 属于 C 标准库函数(
<cstring>头文件)。 
// 从起始地址将要填充的字节数都填充为目标值
memset(起始地址, 值, 要填充的字节数);int a[10];
memset(a, 0, sizeof(a)); // 所有元素初始化为0char c[10];
memset(c, 'A', sizeof(c));  // 所有元素初始化为A
 
不能直接用于非字节类型,比如
int a[5]; memset(a, 1, sizeof(a));并不会将每个int设为1,而是每个字节设为0x01,导致每个int的实际值为0x01010101(16843009)。
3、对比
| 特性 | memset | fill | 
|---|---|---|
| 填充单位 | 字节 | 元素 | 
| 头文件 | <cstring> | <algorithm> | 
| 效率 | 极高(硬件优化) | 较高(通用循环赋值) | 
| 适用类型 | char、内存块 | 任意类型(如 int、double) | 
| 安全性 | 低(易误用导致数据错误) | 高(类型安全) | 
| 典型用途 | 清零内存、初始化字符数组 | 初始化 STL 容器、非字节类型数组 | 
