文章目錄
- 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 容器、非字節類型數組 |