容器填充函数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 容器、非字节类型数组 |