共同作用:
fill 和 memset 都可以用于对一段内存空间进行填充操作
定义与所属库
fill:是 C++ 标准库中的算法函数,定义在头文件中。它通过迭代器指定一个范围,然后将该范围内的每个元素都设置为指定的值。
memset:是 C 和 C++ 中的一个标准库函数,定义在(C++)或<string.h>(C)头文件中。它主要用于对一段内存空间进行字节级别的填充操作。
功能与使用场景
fill
主要用于对容器或数组中的元素进行赋值操作,填充的值可以是任意类型,并且会根据元素的类型进行正确的赋值。
适用于对已知数据类型的容器或数组进行整体赋值的场景,比如将一个vector中的所有元素都设置为某个特定的值,或者将一个数组中的元素初始化为特定值。
memset
按照字节进行内存填充,通常用于将一段内存空间初始化为特定的值,一般用于对字符数组或基本数据类型数组进行快速初始化。
常用于对内存进行清零操作,比如在创建一个新的数组后,使用memset将其所有元素初始化为 0,或者在处理网络编程中的字节流时,对缓冲区进行初始化。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
int main() {
// 使用fill对vector进行填充
std::vector<int> vec(5);
std::fill(vec.begin(), vec.end(), 10);
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
// 使用memset对数组进行填充
int arr[5];
memset(arr, 0, sizeof(arr));
for (int num : arr) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
如果是对标准容器或需要按元素类型进行赋值的情况,通常使用fill;如果是对内存进行字节级别的快速初始化或清零操作,memset更为合适。