列表初始化


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();
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM