【C++】fill函数,fill与memset函数的区别

  • memset函数

    • 按照字节填充某字符
    • 在头文件<cstring>里面
  • fill函数
    • 按照单元赋值,将一个区间的元素都赋同一个值
    • 在头文件<algorithm>里面
  • 因为memset函数按照字节填充,所以一般memset只能用来填充char型数组,(因为只有char型占一个字节)如果填充int型数组,除了0和-1,其他的不能。因为只有00000000 = 0,-1同理,如果我们把每一位都填充“1”,会导致变成填充入“11111111”
  • 而fill函数可以赋值任何,而且使用方法特别简便:
    • fill(arr, arr + n, 要填入的内容);
    • 例如:
    • #include <cstdio>
      #include <algorithm>
      using namespace std;
      int main() {
          int arr[10];
          fill(arr, arr + 10, 2);
          return 0;
      }
    • vector也可以:
    • #include <algorithm>
      #include <vector>
      #include <iostream>
      using namespace std;
      int main(){
          vector<int> v{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
          fill(v.begin(), v.end(), -1);
           return 0;
      }
    • 而memset的使用方法是:
    • #include <iostream>
      #include <cstring>
      using namespace std;
      int main(){
          int a[20];
          memset(a, 0, sizeof a);
          return 0;
      }

原文地址:https://www.cnblogs.com/coder-tcm/p/9201605.html

时间: 2024-07-30 15:34:53

【C++】fill函数,fill与memset函数的区别的相关文章

透彻分析C/C++中memset函数

原文:http://blog.csdn.net/dan15188387481/article/details/49621447 在C语言中,经常需要对内存进行操作,里面涉及很多函数,但是memset函数的使用有一点需要大家格外注意,这也是我在做项目时遇到过的一个问题,调试了很久才找出来错误. 函数原型是:void *memset(void *s, int ch, size_t n); 函数功能是:将s所指向的某一块内存中的前n个字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地

c++ memset函数

函数名称:memset 函数所需头文件:#include<cstring> 函数作用:内存赋值函数,用来给某一块内存空间进行赋值的. 函数结构:memset(变量,一个数字,一个数字)         注:第一个数字为赋值大小,第二个数字为所要赋值的字节大小. 原文地址:https://www.cnblogs.com/lipeiyi520/p/8436582.html

C++初始化问题fill()、memset()函数和图初始化

一.fill()函数 按照单元赋值,将一个区间的元素都赋同一个值 在头文件里面 fill函数可以赋任何值,使用方法: fill(arr, arr + n, 要填入的内容) //int数组 #include <cstdio> #include <algorithm> using namespace std; int main() { int arr[10]; fill(arr, arr + 10, 2); return 0; } //vector #include <iostr

fill,fill-n,memset的区别

这里在网上找到了一个归纳的非常好的总结 fill函数,fill与memset函数的区别 memset函数 按照字节填充某字符 在头文件<string.h>中 因为memset函数按照字节填充,所以一般memset只能用来填充char型数组,(因为只有char型占一个字节)如果填充int型数组,除了0和-1,其他的不能.因为只有00000000 = 0,-1同理,如果我们把每一位都填充"1",会导致变成填充入"11111111" 例如       int

关于memset() 函数的使用

第一次接触了memset() 函数. 感觉的确是一个能够高效的实现对一个array 进行一次性初始化的fancy way. 下面给出介绍: memset() 函数定义在头文件<<cstring>>中, prototype 如下: void * memset ( void * ptr, int ch, size_t num ); 函数的作用是: fill the first num bytes(注意不是element) of block of memory(由空指针ptr指向) wi

memset()函数

1. memset()函数原型是extern void *memset(void *buffer, int c, int count)        buffer:为指针或是数组, c:是赋给buffer的值, count:是buffer的长度. 这个函数在socket中多用于清空数组.如:原型是memset(buffer, 0, sizeof(buffer)) Memset 用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为' '或'/0': 例:char a[100];

strcpy, memcpy, memset函数

一. strcpy函数 原型声明:char *strcpy(char* dest, const char *src); 头文件:#include <string.h> 和 #include <stdio.h> 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串. 返回指向dest的指针. 实现代码: char * strcpy(char * strDest,c

strcpy,memcpy,memset函数实现

strcpy 实现,只能拷贝字符串 char* strcpy(char* des,const char* source) { char* r=des; assert((des != NULL) && (source != NULL)); while((*des++ = *source++)!='\0'); return r; } memcpy 实现,注意目的地址和源地址重合的情况,以及强制类型转换 void *myMemCopy(void *dest,const void *src,siz

memset函数

常见错误: 第一: 搞反了 ch 和 n 的位置. 一定要记住如果要把一个char a[20]清零,一定是 memset(a,0,20);而不是 memset(a,20,0); 第二: 过度使用memset,我想这些程序员可能有某种心理阴影,他们惧怕未经初始化的内存,所以他们会写出这样的代码: 这里的memset是多余的. 因为这块内存马上就被全部覆盖,清零没有意义. 另:以下情况并不多余,因某些编译器分配空间时,内存中默认值并不为0: 第三: 其实这个错误严格来讲不能算用错memset,但是它