c++ 如何批量初始化数组

您所在的位置:网站首页 数组如何初始化为0元素 c++ 如何批量初始化数组

c++ 如何批量初始化数组

2024-06-20 16:55| 来源: 网络整理| 查看: 265

fill函数,fill_n函数与memset函数的区别

对,没有错,我就是懒得写那几行循环的代码.

我们首先定义两个数组:

int a[1000]; char str[1000];

现在要把a里面1000个全部初始化为5;str里面全部初始化为a;

int a[1000] = {0}; char str[1000] = {'a'};

但这样只有第一个元素被设置,其余999个自动默认是int 的0;

我们先来看下memset的用法

首先,memset函数是逐字节进行填充,所以str一般为char *型。 其次,对于其它类型的a,可以填充的值有两个:0和-1.

这是由于计算机中用二进制补码表示数字,0和二进制补码为全0,-1的二进制补码为全1。 最后,如果是memset(a,5,1000*sizeof(int)),就会对每个字节填充5,所以一个int则为0x05050505。

所以我们可以先解决char str[1000]的批量填充.

#include memset(str,'a',sizeof(str)) fill和fill_n的用法

按照单元赋值,将一个区间的元素都赋同一个值. 我们还是来看下实现吧:

void fill(ForwardIt first, ForwardIt last, const T& value); void fill_n(OutputIt first, size n, const T& value); 功能: fill给迭代器范围[first, last)内元素均赋值为value。无返回值。 fill_n将first指向范围内的前n个元素赋值为value。返回first+n(c++11)

template void fill (ForwardIterator first, ForwardIterator last, const T& val) { while (first != last) { *first = val; ++first; } } template OutputIterator fill_n (OutputIterator first, Size n, const T& val) { while (n>0) { *first = val; ++first; --n; } return first; // since C++11 }

对,你没有看错,其实就是循环在干这样的事情.

vector myvector (8,10); // myvector: 10 10 10 10 10 10 10 10 fill_n (myvector.begin(),4,20); // myvector: 20 20 20 20 10 10 10 10 fill_n (myvector.begin()+3,3,33); // myvector: 20 20 20 33 33 33 10 10

所以我们可以解决int a[1000]的批量填充.

#include fill_n(a, 1000, 5); fill(a, a+1000, 5);

特别需要注意的是fill和fill_n的最后一个参数,我们可以看到是一个引用,所以在我们传递的是一个指针的时候,实际上,填充的都是同一个地址,一旦指针指引的对象被析构,填充的所有指针都会变成野指针.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3