看到这么一个东西,可以实现花括号( "{" "}" )初始化容器类。

使用时需包含头文件

#include <initialize_list>

我们都看过这样的代码

vector<int> arr = { ,,,, };

或者

vector<int> arr{ ,,,, };

右边那个花括号返回的类型便是initialize_list

我们可以在自己的类中这么用

class foo {
public:
std::vector<int> data;
//构造函数里放上initialize_list
foo() {}
foo(std::initializer_list<int> list) :data(list) {} void print() {
for (auto item : data) {
std::cout << item;
}
std::cout << endl;
}
};

试验一下

int main() {
foo test1{ ,,,, };
foo test2 = { ,,,, };
test1.print();
test2.print();
return ;
}

可以正常输出

cppreference 的测试代码如下:可以看到这个东西的花样还是挺多的

 #include <iostream>
#include <vector>
#include <initializer_list> template <class T>
struct S {
std::vector<T> v;
S(std::initializer_list<T> l) : v(l) {
std::cout << "constructed with a " << l.size() << "-element list\n";
}
void append(std::initializer_list<T> l) {
v.insert(v.end(), l.begin(), l.end());
}
std::pair<const T*, std::size_t> c_arr() const {
return{ &v[], v.size() }; // copy list-initialization in return statement
// this is NOT a use of std::initializer_list
}
}; template <typename T>
void templated_fn(T) {} int main()
{
S<int> s = { , , , , }; // copy list-initialization
s.append({ , , }); // list-initialization in function call std::cout << "The vector size is now " << s.c_arr().second << " ints:\n"; for (auto n : s.v)
std::cout << n << ' ';
std::cout << '\n'; std::cout << "Range-for over brace-init-list: \n"; for (int x : {-, -, -}) // the rule for auto makes this ranged-for work
std::cout << x << ' ';
std::cout << '\n'; auto al = { , , }; // special rule for auto std::cout << "The list bound to auto has size() = " << al.size() << '\n'; //templated_fn({1, 2, 3}); // compiler error! "{1, 2, 3}" is not an expression,
// it has no type, and so T cannot be deduced
templated_fn<std::initializer_list<int>>({ , , }); // OK
templated_fn<std::vector<int>>({ , , }); // also OK
}

c++ initialize_list的更多相关文章

  1. C++11 中的initialize_list

    这就是一个简单的模板类,不过在C++中有了特殊的语法支持,定义的时候使用如下的格式: initialize_list<double> dl = {1.1, 1.2}; 或者: initia ...

  2. 深入理解C++11【2】

    [深入理解C++11[2]] 1.继承构造函数. 当基类拥有多个构造函数的时候,子类不得不一一实现. C++98 可以使用 using 来使用基类的成员函数. #include < iostre ...

  3. c++ primer plus 第6版 部分三 9章 - 章

    c++ primer plus 第6版                                               部分三 9章 - 章 第9章   内存模型和名称空间 1.单独编译 ...

  4. 几道leetcode不会做的题目

    1.set没有back()函数,今天想到用这个,才发现没有. 2. tuple的initialize_list construct好像不能使用,其实之前没使用过tuple,都是pair,复杂一点的自己 ...

  5. c++11特性学习总结

    ubuntu 16.04 自带gcc 5.4 支持c++11 ubuntu 18.04 自带gcc 7.3 支持c++14 查看编译器支持: c++11 c++14 c++17 c++11 featu ...

  6. 第2课 auto类型推导(1)

    第2课 auto类型推导(1) 一.auto类型推导 (一)与模板类型推导映射关系 1.auto类型推导与模板类型推导可以建立一一映射关系,它们之间存在双向的算法变换.auto扮演模板中T的角色,而变 ...

  7. 深入理解C++11 C3

    继承构造函数 class A { public: A(int i):m_i(i) {} A(double d, int i):m_d(d),m_i(i){} private: int m_i{0}; ...

  8. C++11标准特性的一些理解

    (1)auto 和 decltype 关键字 在C++11之前,auto关键字用来指定存储期(C++98中指的是自动生命周期).在新标准中,它的功能变为类型推断.C++11引入auto关键词与之前C语 ...

  9. 简单C++线程池

    简单C++线程池 Java 中有一个很方便的 ThreadPoolExecutor,可以用做线程池.想找一下 C++ 的类似设施,尤其是能方便理解底层原理可上手的.网上找到的 demo,基本都是介绍的 ...

随机推荐

  1. SQL SERVER实例解析

    什么是SQL SERVER实例 ------------ SQL SERVER实例的概念和“类与对象”的概念很相似.可以把SQL SERVER的安装程序看做是一个类,安装过程则是创建对象的过程,创建出 ...

  2. 【jQuery基础学习】12 jQuery学习感想

    学习完<锋利的jQuery>,用时13天. 这期间,私底下又用了一点时间去W3C上把HTML和CSS重新过了一遍. 总的来说,收获还是蛮多的. 其实在本书里面真正重要的也就前几章,后面的都 ...

  3. [moka同学笔记]百度编辑器Ueditor自动换行,添加<p>的问题(摘录)

     原文:http://www.cnblogs.com/kissdodog/p/5419919.html 百度编辑器Ueditor其实蛮好用的,后来使用了一段时间发现,每次打开后又保存,发现都会往内容的 ...

  4. 我见过的几门语言中的hello world

    1.Java public class hello { public static void main(String[] args){ System.out.println("hello w ...

  5. PHP学习笔记:删除与销毁session

    删除某个session值可以使用PHP的unset函数,删除后就会从全局变量$_SESSION中去除,无法访问. session_start(); $_SESSION['name'] = 'jobs' ...

  6. mysql 数据类型,字符集

    数据类型 1,数值类型2,字符串类型3,日期和时间4,ENUM和SET5,几何数据类型   数据类型选项 unsigned   无负值 zerofill        数值显示有影响,会前置0来填充不 ...

  7. parseInt第二个参数详解

    前阵子在stackOverflow上看到两个这样的问题: 为什么parseInt(8,3) == NaN,parseInt(16,3) == 1? 为什么parseInt('dsff66',16) = ...

  8. IOS中(Xcode) DEBUG模式(RELEASE模式)控制NSLog输出,NSLog两种不同情况的输出方式

    [新年新气象,2016/01/04] 俺们在开发IOS程序过程中,经常需要用到NSLog输出一些信息,甚至有的开发过程,必须在控制台查看输出,有经验的程序员通过控制台输出就能知道整个数据交互的一个流程 ...

  9. mac os x使用Git简易入门教程

    具体如下: 1, 首先要了解什么是Git. 简而言之,Git是一个分布式的代码版本管理工具.类似的常用工具还有SVN,CVS. 概念了解参见:http://baike.baidu.com/subvie ...

  10. ios开发随笔第一篇-button,label按钮的一些属性的使用

    我用的是纯代码方式,喜欢用storyboard开发的其实也很爽了; 首先谈谈button,ios中新建button这个对象一般接触的都明白,UIButton *button名=[ UIButton a ...