• 数组初始化方法总结


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

  • 相关阅读:
    java+opencv实现图像灰度化
    java实现高斯平滑
    hdu 3415 单调队列
    POJ 3368 Frequent values 线段树区间合并
    UVA 11795 Mega Man's Mission 状态DP
    UVA 11552 Fewest Flops DP
    UVA 10534 Wavio Sequence DP LIS
    UVA 1424 uvalive 4256 Salesmen 简单DP
    UVA 1099 uvalive 4794 Sharing Chocolate 状态DP
    UVA 1169uvalive 3983 Robotruck 单调队列优化DP
  • 原文地址:https://www.cnblogs.com/littlehb/p/14968308.html
Copyright © 2020-2023  润新知