• 列表初始化


    initializer list

    在C++中集合(列表)初始化已经成为一个基本功能

    #include <vector>
    #include <map>
    using namespace std;
    
    int a[] = {1, 2, 3};// C++98通过,C++11通过
    int b[] {2, 4, 6};// C++98失败,C++11通过
    vector<int> c{1, 2, 3};// C++98失败,C++11通过
    map<int,float> d = {{1, 1.0f}, {2, 2.0f}};// C++98失败,C++11通过

      这里,初始化列表可以在“{}”之前使用“=”,其效果与不带“=”的初始化相同。这样一来,自动变量和全局变量的初始化在C++中被
    丰富了。程序员可以使用以下几种形式完成初始化的工作:

      1.等号“=”加上赋值表达式(assignment-expression),比如int a = 34 + 4;

      2.等号“=”加上花括号,比如int a = {34 + 4};

      3.圆括号,int a (34 + 4);

      4.花括号 ,int a  {34 + 4};

      后面两种形式可以用于获取堆内存new操作符中,

    int* i = new int(1);
    double* d = new double{1.2f};

      标准模板库容器对初始化列表的支持源自<initializer_list>这个头文件中initializer_list类模板的支持,程序员只要包含了这个头文件,并且声明一个以initializer_list<T>模板类为

    参数的构造函数,同样可以使得自定义的类使用列表初始化

    #include <QCoreApplication>
    #include <initializer_list>
    #include <vector>
    #include <QDebug>
    #include <iostream>
    using namespace std;
    
    enum Gender{boy,girl};
    
    class People
    {
    public:
        People( initializer_list< pair<string,Gender> > l )//initializer_list 的构造函数
        {
            auto i = l.begin();
            for (; i != l.end(); ++i){
                data.push_back(*i);
            }
        }
    
        vector<pair<string,Gender>> data;
    };
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        int i = 0 ;
        string temp;
        People ship2012 = {{"Garfield", boy}, {"HelloKitty", girl}};
        vector<pair<string,Gender>>::iterator iter = ship2012.data.begin();
        for ( ; iter != ship2012.data.end(); ++ iter ){
            i++;
            temp = (*iter).first;
            cout << temp << endl;
        }
    
        return a.exec();
    }
  • 相关阅读:
    [转载-声网]18个实时音视频开发中会用到开源项目
    linux shell命令之wc/split及特殊字符
    RTP推流及验证
    Ubuntu18.04提示wifi无法连接
    ubuntu上Android开发环境及依赖项
    HLS playlist典型示例
    ffmpeg-hls实现分析
    AOSP中的HLS协议解析
    使用ffmpeg搭建HLS直播系统
    流媒体之HLS——综述(二)
  • 原文地址:https://www.cnblogs.com/xiangtingshen/p/10371330.html
Copyright © 2020-2023  润新知