zoukankan      html  css  js  c++  java
  • initializer_list

    initializer_list是C++11提供的新类型,定义在<initializer_list>头文件中。

    首先有了initializer_list之后,对于STL的container的初始化就方便多了,比如以前初始化一个vector需要这样:

    int a[] = {0, 1, 2, 3};
    std::vector<int> vec(a, a+sizeof(a));

    或者:

    std::vector<int> vec;
    vec.push_back(1);
    vec.push_back(3);
    vec.push_back(3);
    vec.push_back(2);
    View Code

    首先看看initializer_list 的作用,可以用大括号来初始化STL的容器,以及可以在for循环中来使用。

     1 #include <iostream>
     2 #include <vector>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     vector<string> v{"ab","cd"};
     8     vector<string>::iterator begin = v.begin();
     9     while(begin!=v.end())
    10     {
    11         cout << *begin++ << endl;
    12     }
    13     for(int i:{1,2,3})
    14     {
    15         cout << i << endl;
    16     }
    17     return 0;
    18 }//输出 ab cd 1 2 3
    View Code

    我们可以在一个函数的参数中声明initializer_list,这样,我们在调用这个函数时,可以直接给这个函数传递大括号即可。

    头文件S.h

     1 #ifndef S_H_INCLUDED
     2 #define S_H_INCLUDED
     3 
     4 #include <vector>
     5 #include <initializer_list>
     6 #include <iostream>
     7 
     8 using namespace std;
     9 
    10 template <typename T>
    11 class S
    12 {
    13 private:
    14     vector<T> v;
    15 public:
    16     S(initializer_list<T> l):v(l)
    17     {
    18         cout << "constructed with a " << l.size() << " -element lists" << endl;
    19     }
    20     void append(initializer_list<T> l)
    21     {
    22         v.insert(v.end(),l.begin(),l.end());
    23     }
    24     void append(T t)
    25     {
    26         v.push_back(t);
    27     }
    28     void print()
    29     {
    30         typename vector<T>::iterator begin = v.begin();
    31         while(begin!=v.end())
    32         {
    33             cout << *begin++ << endl;
    34         }
    35     }
    36 };
    37 
    38 #endif // S_H_INCLUDED
    View Code

    main函数:

     1 #include <iostream>
     2 #include "S.h"
     3 
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     S<int> s{10};
     9     s.append(1);
    10     s.append({2,3,4,6,9});
    11     cout << "begin to print()" << endl;
    12     s.print();
    13     return 0;
    14 }
    View Code

  • 相关阅读:
    Parameter Binding in ASP.NET Web API
    Which HTTP methods match up to which CRUD methods?
    ErrorHandling in asp.net web api
    HttpStatusCode
    Autofac Getting Started(默认的构造函数注入)
    Autofac Controlling Scope and Lifetime
    luvit 被忽视的lua 高性能框架(仿nodejs)
    undefined与null的区别
    VsCode中使用Emmet神器快速编写HTML代码
    字符串匹配---KMP算法
  • 原文地址:https://www.cnblogs.com/wsl96/p/13093150.html
Copyright © 2011-2022 走看看