zoukankan      html  css  js  c++  java
  • 数组初始化方法总结

    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方法速度较慢。

  • 相关阅读:
    大数据基本概念及Hadoop技术基础
    基于 ReliefF和K-means算法的应用
    利用Hadoop和Spark处理用户心跳周期数据
    Java线程池源码解析及高质量代码案例
    muleESB的第一个开发实例-HelloWorld(二)
    [USACO11JAN]道路和飞机Roads and Planes
    CH6101 最优贸易
    POJ3662 Telephone Lines
    扫描线+线段树例题(HDU1542)
    关于Dinic算法的几点讨论
  • 原文地址:https://www.cnblogs.com/littlehb/p/14968308.html
Copyright © 2011-2022 走看看