ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于数组的初始化

2021-07-04 10:02:11  阅读:190  来源: 互联网

标签:初始化 填充 int memset 关于 数组 include fill


1、循环法

//一维数组循环初始化
for(int i=0;i<=N;i++)
   a[i]=1;
//二维数组循环初始化
for(int i=0;i<=N;i++)
   for(int j=0;j<=N;j++)
      a[i][j]=1;

总结:
就是一顿无脑的循环,一维就一层,二维就二层,三维就三层,无脑,太无脑,浪费手指头。

2、memset法

局限性很强,但网友们大量使用,事实标准。
按照字节填充某字符。因为memset函数按照字节填充,所以一般memset只能用来填充char型数组,(因为只有char型占一个字节)如果填充int型数组,除了0-1,其他的不能。因为只有00000000 = 0-1同理,如果我们把每一位都填充"1",会导致变成填充入11111111
memset的使用方法是:

#include <iostream>
#include <cstring>
using namespace std;
int main(){
    int a[20];
    memset(a, 0, sizeof a);
    return 0;
}

3、fill法

fill函数可以赋值任何,而且使用方法特别简便:
例如int数组:fill(arr, arr + n, 要填入的内容);

#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
    int arr[10];
    fill(arr, arr + 10, 2);
    return 0;
}

vector也可以:fill(v.begin(), v.end(), 要填入的内容);

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

fill填充二维(多维也是一样)的方法:
fill(a[0],a[0]+m*n,1)
参数的类型和上面的一样,这里唯一值得注意的是第一个起始地址,

(1) 二维数组,它的第一个数值的表达是 a[0][0],而它的地址就可以用a[0] 来表示。
(2) 三维数组,它的第一个数值的表达是 a[0][0][0],而它的地址就可以用a[0][0] 来表示。

 //二维数组初始化为1
 fill(a[0], a[0] + N * N , 1);

 //三维数组初始化为1
 fill(a[0][0], a[0][0] + N * N * N, 1);

4、总结

memset主要对数组进行赋值,且对int型数组,只能赋值为0-1

fill函数可以对数组或其他容器,进行赋值,值可以任意。

fillmemset都作用于int型数组上时,fill方法速度较慢。

标签:初始化,填充,int,memset,关于,数组,include,fill
来源: https://www.cnblogs.com/littlehb/p/14968308.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有