C++中 fill( ) 和memset()的区别和用法

24 篇文章 0 订阅
订阅专栏

1.首先是头文件的不同

fill()函数的头文件是#include<algorithm>

memset()函数的头文件是#include<cstring>

2.用法的不同

memset()函数原型是:void *memset(void *s, int ch, size_t n);

    函数功能是:将s所指向的某一块内存中的前n个字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针,它是对较大的结构体或数组进行清零操作的一种最快方法。
 

#include <iostream>
#include<cstring>
using namespace std;

int main()
{
	int a[10] = { 1,2,3,4,5 };
	memset(a, 0, sizeof(a));
	for (int i = 0; i < 10; i++) printf("%d ", a[i]);
	return 0;
}

但是要注意的是,memset是按照一个一个字节给元素初始化为中间的参数ch的。如果ch的值为0,结果是对的,但是 如果是2,就不对了,因为整型是四个字节,将一个整型数按每个字节初始化为00000010 00000010 00000010 00000010= 33686018,这样数组元素的值都变成了33686018。

我做了一下实验将ch的值改为256或者512,结果也能初始化为0,这里虽然ch的类型是int占有4个字节,但是memset函数只会取最后一个字节的数来进行初始化,256为 00000000 0000000 00000001 00000000,取最后一个字节为00000000,那就会表示0。从数组的首地址开始,每个字节都会被初始化为0。 

 所以,在memset使用时要千万小心,在给char(单字节)以外的数组赋值时,只能初始化为0或者-1。

fill()函数: 

1.对一维数组a[n]的赋值,
fill(a,a+n,1)
第一个参数是起始地址
第二个参数是我们需要结束的地方,但不会报告a[n],区间为[a[0],a[n])前闭后开
第三个参数是我们需要的赋值,这个相对memeset()就灵活很多

2.对二维数组a[m][n]的赋值
fill(a[0],a[0]+mn,1)
参数的类型和上面的一样,这里唯一值得注意的是第一个起始地址,因为是二维数组,它的第一个数值的表达是 a[0][0],而它的地址就可以用a[0] 来表示。
 

 

C++ memset和fill方法总结
Do Better
11-26 1370
文章目录1.memset2.fillfill方法的应用场景使用fill()函数填充普通一维数组使用fill()函数填充vector使用fill()函数填充二维数组3.二者区别点4.参考资料 1.memset memset是计算机C/C++语言初始化函数。作用是将某一块内存的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。 头文件: #include<cstring&g...
[C++] memset函数和fill函数
冰糖葫芦的博客
09-04 332
1. memset 函数 (1)头文件 : ==<font color= red> cstring</font>== (2)memset(数组名,值,sizeof(数组名)), 值 取一个字节(后8位) (3)按字节填充 类型 取值 char 都可取(char类型只有一个字节) bool true,false(同上) int 0 ,-1 ...
C++C++的std::fill函数使用详解
最新发布
qq_35902025的博客
07-28 2037
本文主要对C++的std::fill函数使用进行详解,对比std::fill 和 std::fill_n的差异,以及介绍初始化容器的其他方法
有关C++memset和fill
种花家的奋斗兔的博客
07-26 420
有关C++memset和fill函数区别及实例 memset函数 按照字节填充某字符 在头文件<cstring>里面 fill函数 按照单元赋值,将一个区间的元素都赋同一个值 因为memset函数按照字节填充,所以一般memset只能用来填充char型数组,(因为只有char型占一个字节)如果填充int型数组,除了0和-1,其他的不能。因为只有00000000 = 0,-...
c++ fill 与memset区别
义小攻的博客
03-30 446
fill()的原理是把那一块单元赋成指定的值,也就是说任何值都可以, 而在memset(),则是将s所指向的某一块内存的每个字节的内容 全部设置为ch指定的ASCII值。 #include #include #include #include using namespace std; int main() { int a[10]; memset(a,2,sizeof(a)
fill函数memset函数比较
Stark_industry
02-11 936
C++】fill函数,fill与memset函数区别 1,memset函数 按照字节填充某字符 在头文件&amp;lt; cstring &amp;gt;里面 2,fill函数 按照单元赋值,将一个区间的元素都赋同一个值 在头文件&amp;lt; algorithm&amp;gt;里面 3,因为memset函数按照字节填充,所以一般memset只能用来填充char型数组,(因为只有char型占一个字节),也可以用来填充boo...
【C/C++memset()和fill()函数
qq_44794039的博客
02-24 1087
memset()函数 【头文件】 C语言为:#include <memory.h> 或 #include <string.h> C++为:#include <cstring> 【使用方法】 memset函数的作用是:按照字节填充某字符 memset效率比for循环赋值和fill赋值要快一些 将int数组初始化为0: int a[10005]; memset(a, 0, sizeof(a)); 将int数组初始化为-1: int a[10005]; memset
C++memset函数用法详解
09-02
在处理非字符类型的数据或者只读内存时,应该寻找其他合适的初始化方法,如构造函数C++11的`std::fill`或`std::memset_s`等安全版本。在处理结构体或类时,除非完全理解其内部结构,否则避免使用`memset`进行初始...
C++】fill函数memset函数 的总结与分析
ミ渴望ヽ不可及ゞ的博客
02-03 669
目录 memset函数fill函数 memset函数 memset函数 按照字节填充,所以一般用来填充char型数组(char型只占一个字节),如果填充int型数组只能填0或者-1,其他的不能。 在头文件#include<ctring>,使用时应声明。 使用方法:memset(arr,要赋的值,sizeof(arr); #include<bits/stdc++.h&gt...
c++ memset 语言_C/C++的数组和数组的memset函数
weixin_36102776的博客
01-12 764
1. 数组介绍1.1 什么是数组?数组就是把相同数据类型的变量组合在一起而产生的数据集合。从数组定义可以看出数组主要有两个方面:相同数据类型的变量;数据集合;对于第一点比较好理解,对于第二点简单来说就是把这些相同数据类型的变量按某种关系联系起来,这也是数据结构的定义。因此数组可以说是一个存储数据的数据结构,这种关系是这些相同数据类型的变量在内存必须是连续存储的。1.2 数组定义前面说数组是相同...
C++】fill函数,fill与memset函数区别
柳婼 の blog
08-24 2万+
memset函数按照字节填充某字符 在头文件&amp;amp;lt;cstring&amp;amp;gt;里面 fill函数按照单元赋值,将一个区间的元素都赋同一个值 在头文件&amp;amp;lt;algorithm&amp;amp;gt;里面 因为memset函数按照字节填充,所以一般memset只能用来填充char型数组,(因为只有char型占一个字节)如果填充int型数组,除了0和-1,其他的不能。因为只有00000000 = 0,-1同理,如果我们把每一位都填充“1
fill函数memset函数
lilian的博客
04-13 512
fill函数memset函数都可以给数组赋初始值,但有以下区别memset函数是按照字节赋值,一般只能给数组赋初始值0或-1,头文件为#include <string.h>或#include <cstring>,使用方法为memset(数组名,初始值,sizeof(数组名)) fill函数是按照单元赋值,可以将一个数组的所有元素赋同一值(可以为任意值),头文件为#...
C++的fill函数memset函数区别
逝不等琴生的博客
07-09 661
前言 一般来说,给数组的每一个元素赋相同的值有两种方法:memset函数和fill函数,下面介绍一下二者的区别。 正文 memset函数 函数在头文件< string.h> memset函数格式: memset(数组名,值,sizeof(数组名)) 按字节赋值,即对每个字节赋相同的值 由于是按字节赋值,故通常只使用memset赋0或-1,而赋值其他数值则使用fill()函数...
fill()函数用法
热门推荐
qq_40688707的博客
10-15 3万+
fill()函数参数:fill(first,last,val);  // first 为容器的首迭代器,last为容器的末迭代器,val为将要替换的值。 举例: int a[5]; for(int i = 0;i &lt; 5;i++) { cin&gt;&gt;a[i]; } int b;//需要替换的数 cin&gt;&gt;b; ...
C++ fill()函数最详细介绍
weixin_45942949的博客
01-31 3352
fill函数C++标准库的一个算法函数,用于将指定范围内的元素赋值为给定的值。它接受三个参数:first:表示要填充的范围的起始迭代器(表示开始位置),指向要填充的第一个元素。last:表示要填充的范围的结束迭代器(表示结束位置的下一个),指向要填充的最后一个元素的下一个位置。value:表示要赋给范围内的每个元素的值。
fill填充函数解析及用法示例
SZU_黄其才
03-09 1万+
fill填充函数解析及用法示例 fill(x,y,‘color’); 其x,y是填充的范围,color是填充的颜色。 1、对x,y范围的获取,示例: 所以可以得出x = [0,1,1,0]; y = [0,0,1,1]; 示例代码如下: %% 画一个填充图形 % 思路:首先需要得到填充图形的x y 范围,然后再填充图形 clear; clc; close all; x = [0,1,1,0];...
fill()函数用法
weixin_64393298的博客
04-24 1819
fill()函数参数:fill(first,last,val); first 为容器的首迭代器,last为容器的末迭代器,val为将要替换的值。 举例: #include<bits/stdc++.h> using namespace std; int main() { int a[10]; for(int i=0;i<10;i++) { cin>>a[i]; } fill(a,a+10,2); for(in.
C++的fill函数
yayayaxxx的博客
11-12 4551
{}所赋的值为:valfill函数可以为数组或者vector的每个元素赋以相同的值,通常用于初始化!数组的效率往往比vector高,使用assign函数只能对vector赋初值~所以当要对数组赋初值时可以使用fill函数。fill函数包含在算法库
STL 数据填充相关算法总结
编程猿来如此
07-16 360
STL 数据填充相关算法总结
java代码实现c++memset方法
07-14
在Java,没有提供类似C++的`memset`函数来初始化内存块。但是,你可以使用Java的数组来实现类似的功能。下面是一个示例代码,演示了如何使用数组来模拟`memset`函数的功能: ```java import java.util.Arrays; public class Main { public static void main(String[] args) { int[] arr = new int[10]; int value = 5; // 使用Java内置的Arrays.fill方法将数组所有元素设置为指定值 Arrays.fill(arr, value); // 打印数组 for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } } } ``` 在上面的示例,我们创建了一个长度为10的整数数组`arr`,然后使用`Arrays.fill`方法将数组的所有元素设置为值`value`。最后,我们使用一个循环打印数组的所有元素。 运行上述代码,输出结果为:`5 5 5 5 5 5 5 5 5 5` 这样就实现了类似于C++的`memset`函数的效果。
写文章

热门文章

  • 无符号0减1的结果 11906
  • C++常用库函数 6637
  • 3.Matlab——数组大小 5202
  • 7.Matlab——数组扩展(续) 5194
  • C++ 中使用delete删除指针的注意点 2804

分类专栏

  • LeetCode 111篇
  • 学习 1篇
  • MySQL 2篇
  • 解题模板 10篇
  • 操作系统 2篇
  • 数据结构 7篇
  • 计算机网络 1篇
  • 剑指offer 63篇
  • Linux 1篇
  • 优化算法 1篇
  • 手机摄影 2篇
  • PAT 115篇
  • C++ 24篇
  • matlab基础知识 7篇

最新评论

  • 无符号0减1的结果

    cai小白: 在有符号数的情况下,需要将补码运算结果在转化成反码,而无符号数运算的情况下,结果是默认为源码形式,不需要转化的,所以博主说的没错。

  • 无符号0减1的结果

    瞳有万千星辰: 他这应该是放到寄存器的环境下说的了,计算机内部数是用补码表示的

  • 无符号0减1的结果

    FLUENTYAN: 了解一下补码

  • 无符号0减1的结果

    meiqianqion: 有符号数是按补码解释的

  • 无符号0减1的结果

    fzc721216: 照你这么说有符号0-1也是65535了?

大家在看

  • iOS13系统 系统UISegmentedControl圆角不生效问题
  • 扫大雷(bushi)
  • learn-前段-笔记-day02 799
  • 智能扭矩系统Torque在新能源领域的应用_SunTorque
  • 5000万美金被黑客转移,详解区块链Radiant Capital被盗事件

最新文章

  • 每天一遍
  • LeetCode292.——Nim 游戏
  • LeetCode231——2的幂
2020年157篇
2019年230篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家武汉校园玻璃钢雕塑生产厂家芒市玻璃钢雕塑设计莱芜商场美陈玻璃钢仿真酒瓶雕塑汕头玻璃钢牛雕塑济南玻璃钢花盆定制商场圣诞美陈方案上海艺术商场美陈生产企业欧式人物玻璃钢雕塑制作厂家温州户外景观玻璃钢雕塑吉安动物玻璃钢雕塑专业制作玻璃钢雕塑香港商场花艺美陈东莞透明玻璃钢雕塑现货南宁欧式玻璃钢雕塑供应商威海玻璃钢雕塑价格大型玻璃钢雕塑龙图片西昌玻璃钢牌匾雕塑河南欧式玻璃钢雕塑定做价格海口定做玻璃钢雕塑厂家春季美陈商场绍兴中庭商场美陈玻璃钢花盆高端大气佛山吉祥物玻璃钢卡通熊猫雕塑果洛玻璃钢雕塑哪里好宝鸡园林玻璃钢仿铜雕塑公司玻璃钢雕塑价格如何江苏玻璃钢小羊动物雕塑艺术摆件晋江玻璃钢雕塑生产厂家贵州玻璃钢商场美陈雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化