zoukankan      html  css  js  c++  java
  • C++11之列表初始化

       列表初始化

     (1)C++98{}初始化 --- 缺陷: 只能初始化内置类型

    //C++98使用{}对数组初始化
    int arr[] = {1,2,3};
    int arr[4] = {1};
    //但对于自定义类型会报错
    vector<int> v{1,2,3,4};
    

     (2)C++11内置类型列表初始化 --- {}之前可以使用=,效果一样

    //内置类型
    int x1 = {10};
    int x2{10};
    int x3 = 1+2;
    int x4 = {1+2};
    int x5{1+2};
    //数组
    int arr1[5] {1,2,3,4,5};
    int arr2[] {1,2,3,4,5};
    
    //动态数组 , C++98不支持
    int* arr3 = new int[5]{1,2,3,4,5};
    //标准容器
    vector<int> v{1,2,3,4,5};
    map<int,int> m{{1,1},{2,2},{3,3}};
    

     (3)C++11自定义类型列表初始化

    //1.支持对单个对象直接列表初始化
    class Point{
        public:
            Point(int x = 0, int y = 0):_x(x),_y(y)
            {}
        private:
            int _x;
            int _y;    
    };
    Point p{1,1};
    //2.多个对象列表初始化需要重载一个带有initialzer_list类型参数的构造函数
    //initialzer_list: 系统自定义类模板 主要方法:begin(),end(),size()
    //模拟Vector借用initialzer_list实现多对象初始化
    #include<class T>
    class Vector{
         public:
             //...
             Vector(initialzer_list<T> l): _cap(l.size()), _size(0)
             {
                 _arr = new T[_cap];
                 for(auto e : l)
                 {
                      _arr[_size++] = e;   
                 }
             }
             
             Vector<T>& operator=(initialzer_list<T> l)
             {
                 delete _arr;
                 size_t i = 0;
                 for(auto e : l)
                 {
                     _arr[i++] = e;
                 }
                 return *this;
             }
             //...
         private:
             T* _arr;
             size_t _cap;
             size_t _size;`  
    };
    

      initialzer_list基本用法:

           

  • 相关阅读:
    线程包含CPU现场
    K8S资源操作
    Kubernetes资源管理
    kubernetes部署安装
    kubernetes简介
    Docker总结
    3.11 虚拟局域网
    3.10 以太网交换机生成树协议STP
    3.9 以太网交换机自学习和转发帧的流程
    3.8 集线器与交换机的区别
  • 原文地址:https://www.cnblogs.com/Duikerdd/p/12505772.html
Copyright © 2011-2022 走看看