c++学习-initializer_list

本文参考了[std::initializer_list]当中的内容,做一个简单的读书笔记。

基本概念

template<class T> class initializer_list; // 初始化列表类型

从这个定义我们看出,initializer_list是一个模板类。具体来说这个类的作用就是根据c++语言当中的初始化列表声明,构造一个初始化列表对象。这样就可以将这个将这个初始列表的声明保存下来。和之前的函数对象有异曲同工之妙,就是赋予初始化列表变量的语义。

#include <iostream>
#include <vector>
#include <initializer_list>

int main( void ){

    int arr[] = {1,2,3}; // initialization list declarations

    // store the initialization list declarations
    std::initializer_list<int> init_list = {1,2,3};

    return 0;
}

initializer_list< T >类型只能通过迭代器进行访问。

#include <iostream>
#include <vector>
#include <initializer_list>


int main( void ){

    std::initializer_list<int> il = {1,2,3};
    typedef std::initializer_list<int>::iterator iter;
    iter b = il.begin();
    iter e = il.end();

    while(b != e){
        std::cout << *b << std::endl;
        ++b;
    }

    return 0;
}

它的主要用法是可以通过initializer_list来为对象提供一种通过初始化列表构造对象的方法。注意:这里要区分它和参数初始化列表,他们两不是同一个东西,后者并没有提供多余的对象初始化方法。

#include <iostream>
#include <vector>
#include <initializer_list>

int main( void ){

    std::vector<int> arr = {1,2,3}; // legal in c++11

    return 0;
}
#include <iostream>
#include <vector>
#include <initializer_list>

class Point {
public:
    Point() : x(0), y(0) {}
    Point( int xx, int yy ) : x(xx), y(yy) {}
    Point( const std::initializer_list<int>& il ) {
        typedef std::initializer_list<int>::const_iterator const_iter;
        const_iter b = il.begin();
        x = *b;
        y = *(b+1);
    }

    void print(){
        std::cout << x << "," << y << std::endl;
    }

private:
    int x;
    int y;
};

int main( void ){

    Point p1;
    p1.print();

    Point p2(1,2);
    p2.print();

    Point p3 = {3,4}; // implicit conversion 通过初始化列表为构造多提供了一种可能
    p3.print();

    std::initializer_list<int> il = {5,6};
    Point p4(il);
    p4.print();

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值