• 【转】c++ 如何批量初始化数组 fill和fill_n函数的应用


    http://blog.csdn.net/sunquana/article/details/9153213

    一、 fill和fill_n函数的应用:

        fill函数的作用是:将一个区间的元素都赋予val值。

         函数参数:fill(first,last,val);//first为容器的首迭代器,last为容器的尾迭代器,

    替换元素的区间为[first,last),val为将要替换的值。

         eg:
                 vector <int> V;
                 fill(V.begin(),V.end(),val);

    二、fill_n函数的作用是:

    给你一个起始点,然后再给你一个数值count和val。把从起始点开始依次赋予 count个元素val的值。

           注意: 不能在没有元素的空容器上调用fill_n函数。

    例题:给你n个数,然后输入一些操作:start,count,paint。表示从start开始连续填充count个数字,paint为填充的数值。

    #include <iostream>
    #include <algorithm>
    #include <vector>
    using namespace std;
    void print(int &elem){cout<<elem<<" ";}
    int main()
    {
        vector <int> V;
        int n,start,count,paint;
        cin>>n;
        V.resize(n);
        while(cin>>start>>count>>paint)
        {
            fill_n(V.begin()+start-1,count,paint);
            for_each(V.begin(),V.end(),print);
            cout<<endl;
        }
        return 0;
    }

    其他的一些实例:

       vector<int> 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

    三、关于memset()函数:

      这个 函数是按字节覆盖,批量初始化内存空间,下面我们来看一个例子:

    //注意移位运算的优先级小于 +
        unsigned int maxn=(1<<31)-1-(1<<7)-(1<<15)-(1<<23);
        int c[2];
        memset(c,0x7f,sizeof(c));
        printf("%0x
    ",maxn); //7f7f7f
        printf("%0x
    ",c[0]);//7f7f7f

    结果都是 :0x7f7f7f由此说明memset的操作方式。

    我们也可以根据该特性:来定义一个无穷大:

    有符号整形的最大值:

    max_int= 2147483647,也就是:(1<<31)-1

     而0x7f7f7f=2139062143

    eg:因此我们可以这样给数组初始化无穷大:memset(array,0x7f,sizeof(array));

  • 相关阅读:
    slf4j日志框架绑定机制
    Btrace使用入门
    JVM反调调用优化,导致发生大量异常时log4j2线程阻塞
    [转载]Javassist 使用指南(三)
    [转载]Javassist 使用指南(二)
    [转载]Javassist 使用指南(一)
    数组升序排序的方法Arrays.sort();的应用
    copyOfRange的应用
    copyOf数组复制方法的使用(数组扩容练习)
    binarySearch(int[] a,int fromIndex,int toIndex, int key)的用法
  • 原文地址:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/3854571.html
Copyright © 2020-2023  润新知