转自某大神:传送门
C++中fill()、fill_n()与memset()函数的区别
fill()函数
说明
在头文件<algorithm>里。
按照数组的始末位置以一个数组元素为单位赋值,将区间内的每一个元素都赋值为val。
用法
fill(vector.begin(), vector.end(), val);
fill()函数
说明
在头文件<algorithm>里。
从当前起始点开始,将之后的cnt个元素赋值为val。
注意:不能在没有元素的空容器上调用fill_n()函数
用法
fill(vector.begin(), cnt, val);
实例
#include <algorithm>
#include <vector>
using namespace std;
int main () {
vector<int> myvector (4,10); // myvector: 10 10 10 10
fill_n (myvector.begin(),2,20); // myvector: 20 20 10 10
return 0;
}
1
2
3
4
5
6
7
8
memset()函数
说明
在头文件<cstring>里。
将已开辟的内存空间arr的前cnt个字节的值设为值val。
理论上,因为memset()是按照字节去赋值的,所以int数组只能被赋值为0(在二进制层面全为0)或者是-1(在二进制层面全为1)。
理论上只能初始化为0和-1,但是!
偶然发现memset()函数还能将int型数组初始化为INF(0x3f3f3f3f),不是太懂是为什么,以后再想原因吧。
用法
memset(arr, val, cnt);