zoukankan      html  css  js  c++  java
  • initializer_list 列表初始化

    initializer_list 列表初始化

    用花括号初始化器列表初始化一个对象,其中对应构造函数接受一个 std::initializer_list 参数.

    #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
    ";
        }
        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[0], v.size()};  // 在 return 语句中复制列表初始化
                                       // 这不使用 std::initializer_list
        }
    };
     
    template <typename T>
    void templated_fn(T) {}
     
    int main()
    {
        S<int> s = {1, 2, 3, 4, 5}; // 复制初始化
        s.append({6, 7, 8});      // 函数调用中的列表初始化
     
        std::cout << "The vector size is now " << s.c_arr().second << " ints:
    ";
     
        for (auto n : s.v)
            std::cout << n << ' ';
        std::cout << '
    ';
     
        std::cout << "Range-for over brace-init-list: 
    ";
     
        for (int x : {-1, -2, -3}) // auto 的规则令此带范围 for 工作
            std::cout << x << ' ';
        std::cout << '
    ';
     
        auto al = {10, 11, 12};   // auto 的特殊规则
     
        std::cout << "The list bound to auto has size() = " << al.size() << '
    ';
     
    //    templated_fn({1, 2, 3}); // 编译错误!“ {1, 2, 3} ”不是表达式,
                                 // 它无类型,故 T 无法推导
        templated_fn<std::initializer_list<int>>({1, 2, 3}); // OK
        templated_fn<std::vector<int>>({1, 2, 3});           // 也 OK
    }

  • 相关阅读:
    2. Add Two Numbers
    1. Two Sum
    22. Generate Parentheses (backTracking)
    21. Merge Two Sorted Lists
    20. Valid Parentheses (Stack)
    19. Remove Nth Node From End of List
    18. 4Sum (通用算法 nSum)
    17. Letter Combinations of a Phone Number (backtracking)
    LeetCode SQL: Combine Two Tables
    LeetCode SQL:Employees Earning More Than Their Managers
  • 原文地址:https://www.cnblogs.com/douzujun/p/10620287.html
Copyright © 2011-2022 走看看