C++中fill()、fill_n()与memset()函数的区别

C++中fill()、fill_n()与memset()函数的区别

fill()函数

说明

  在头文件里。

  按照数组的始末位置以一个数组元素为单位赋值,将区间内的每一个元素都赋值为val

用法

  fill(vector.begin(), vector.end(), val);

实例

#include 
using namespace std;
int main() {
    int n[10];
    fill(n, n + 10, 2);
    return 0;
}

fill()函数

说明

  在头文件里。

  从当前起始点开始,将之后的cnt个元素赋值为val

  注意:不能在没有元素的空容器上调用fill_n()函数

用法

  fill(vector.begin(), cnt, val);

实例

#include 
#include 
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;
}

memset()函数

说明

  在头文件里。

  将已开辟的内存空间arr的前cnt个字节的值设为值val

  理论上,因为memset()是按照字节去赋值的,所以int数组只能被赋值为0(在二进制层面全为0)或者是-1(在二进制层面全为1)。

  理论上只能初始化为0和-1,但是!

  偶然发现memset()函数还能将int型数组初始化为INF(0x3f3f3f3f),不是太懂是为什么,以后再想原因吧。

用法

  memset(arr, val, cnt);

实例

#include 
// 宏定义
#define memset(a,b) memset(a,b,sizeof(a))
using namespace std;
int main(){
    int a[20];
    memset(a,0); // 初始化为0
    memset(a,-1); // 初始化为-1
    cosnt int INF = 0x3f3f3f3f; // 定义INF常量
    memset(a,INF); // 初始化为INF
    return 0;
}

你可能感兴趣的:(ACM)