zoukankan      html  css  js  c++  java
  • c++11::initializer_list

    #include <initializer_list>
    template <class T> class initializer_list;
    initializer_list对象中的元素永远是常量值const T,不能initializer_list对象中元素的值修改
    1、可以使用初始化列表语法, 将stl容器初始化一系列值,容器类将initializer_list<T> 作为构造函数。
    initializer_list类型元素必须相同,编译器将进行必要转换。
    std::vector<double> Array{1.12, 4.35, 5.756, 10, 20};
    std::vector<double> Array{1.12, 4.35, 5.756, 10.0, 20.0};
    2、c++11新增通用的初始化语法,可以使用{}而不是()来调用类构造函数。
    int units_sold=0;
    int units_sold(0);
    int units_sold={0}; 
    int units_sold{0};  
    shared_ptr<double> pd {new double}
    3、initializer_list类型来实现构造函数,在新建对象时,就可以使用列表初始化的方式了。
    class FooVector
    {
        std::vector<int> content_;
    
    public:
        FooVector(std::initializer_list<int> list)
        {
            for (auto it = list.begin(); it != list.end(); ++it)
            {
                content_.push_back(*it);
            }
        }
    };
    
    class FooMap
    {
        std::map<int, int> content_;
        using pair_t = std::map<int, int>::value_type;
    
    public:
        FooMap(std::initializer_list<pair_t> list)
        {
            for (auto it = list.begin(); it != list.end(); ++it)
            {
                content_.insert(*it);
            }
        }
    };
    
    int main(void)
    {
        FooVector foo1 = { 1, 2, 3, 4, 5 };
        FooMap foo2 = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
        return 0;
    }
  • 相关阅读:
    python的eval、exec函数使用总结
    sorted()&enumerate()
    递归
    作用域
    Python3 os.stat() 方法
    android 电容屏(一):电容屏基本原理篇
    Linux 2.6内核与Linux 3.0 的区别!
    struct device的成员变量bus_id到哪里去了?
    Linux内核中ioremap映射的透彻理解
    Android 通过串口模拟 模拟物理按键
  • 原文地址:https://www.cnblogs.com/osbreak/p/11077220.html
Copyright © 2011-2022 走看看