fill()和fill-n()函数用法及与memset的区别

xiaoxiao2021-02-28  71

fill 和fill_n函数是C++ Primer第十二章泛型算法部分内容,并把它们称为生成和变异算法,也就是说这两个函数只能对输入范围内已存在的元素进行操作。如果试图对空容器进行fill_n操作,会导致严重的运行错误,所以在对元素进行写入操作时要检查目标的大小是否足以存储要写入的元素。

fill函数的作用是:将一个区间的元素都赋予val值。函数参数:fill(vec.begin(), vec.end(), val); val为将要替换的值。

[cpp]  view plain copy # include <algorithm>   fill(vec.begin(), vec.end(), val); //原来容器中每个元素被重置为val  

fill_n函数的作用是:参数包括 : 一个迭代器,一个计数器以及一个值。该函数从迭代器指向的元素开始,将指定数量的元素设置为给定的值。 注意: 不能在没有元素的空容器上调用fill_n函数,但是可以通过下面的方法改进。 [cpp]  view plain copy fill_n(vec.begin, 10, val);  

为了保证算法有足够的元素存储输出数据,我们使用“插入迭代器”(insert iterator),插入迭代器是可以给基础容器添加元素的迭代器。

使用 back_inserter 的程序需要包含头文件#include<iterator>,将上面的程序改写成:

[cpp]  view plain copy #include <iterator>   vector<int> vec; //定义一个空容器   fill_n (back_inserter(vec), 10 val);  

在这个程序中,fill_n() 函数每写入一个值,都会通过back_inserter生产的插入迭代器实现。效果相当于在vec上调用push_back,在vec末尾添加10个元素。

【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.6miu.com/read-74189.html

最新回复(0)