C++ initializer_list 列表初始化(八股总结)

定义

std::initializer_list 是 C++11 引入的一个类模板,用于支持列表初始化。它允许开发者使用花括号 {} 提供一组值直接初始化容器或自定义类型。std::initializer_list 提供了一种简洁优雅的语法来传递多个值。

主要用途
  1. 初始化容器

    使用列表初始化方式为容器赋值。

    cpp 复制代码
    #include <iostream>
    #include <vector>
    
    int main() {
        std::vector<int> vec = {1, 2, 3, 4, 5};
        for (int i : vec) {
            std::cout << i << " ";
        }
        return 0;
    }

    输出

    复制代码
    1 2 3 4 5
  2. 构造函数重载

    用于支持构造函数接受多参数的初始化列表。

    cpp 复制代码
    #include <iostream>
    #include <initializer_list>
    
    class MyClass {
    public:
        MyClass(std::initializer_list<int> values) {
            for (int value : values) {
                std::cout << value << " ";
            }
            std::cout << std::endl;
        }
    };
    
    int main() {
        MyClass obj = {10, 20, 30, 40};
        return 0;
    }

    输出

    复制代码
    10 20 30 40
  3. 函数参数

    用于函数接收可变数量参数的情景,提供了一种更直观的方式。

    cpp 复制代码
    #include <iostream>
    #include <initializer_list>
    
    void printValues(std::initializer_list<int> values) {
        for (int value : values) {
            std::cout << value << " ";
        }
        std::cout << std::endl;
    }
    
    int main() {
        printValues({5, 10, 15, 20});
        return 0;
    }

    输出

    复制代码
    5 10 15 20
区别分析

std::initializer_list 和传统的数组或 std::vector 的主要区别:

  1. 只读性std::initializer_list 的元素是只读的,无法修改。
  2. 临时性std::initializer_list 是轻量的,通常作为一个临时对象存在,生命周期受限。
  3. 用途 :主要用于初始化操作,而 std::vector 更适合复杂的动态数组操作。
示例代码对比

数组与初始化列表对比

cpp 复制代码
#include <iostream>
#include <vector>
#include <initializer_list>

void modifyArray(std::vector<int>& arr) {
    arr[0] = 99; // 可修改
}

void modifyInitList(std::initializer_list<int> values) {
    // values[0] = 99; // 错误,std::initializer_list 是只读的
    for (int value : values) {
        std::cout << value << " ";
    }
    std::cout << std::endl;
}

int main() {
    std::vector<int> arr = {1, 2, 3};
    modifyArray(arr);
    for (int val : arr) {
        std::cout << val << " "; // 输出 99 2 3
    }
    std::cout << std::endl;

    modifyInitList({4, 5, 6}); // 输出 4 5 6
    return 0;
}

通过以上分析可以看到,std::initializer_list 提供了一种便捷但只读的方式来初始化或传递一组值,非常适合初始化容器和自定义类型。

相关推荐
虾球xz1 小时前
游戏引擎学习第268天:合并调试链表与分组
c++·学习·链表·游戏引擎
fpcc1 小时前
跟我学c++高级篇——模板元编程之十三处理逻辑
c++
格林威2 小时前
Baumer工业相机堡盟工业相机的工业视觉中为什么偏爱“黑白相机”
开发语言·c++·人工智能·数码相机·计算机视觉
Dream it possible!3 小时前
LeetCode 热题 100_只出现一次的数字(96_136_简单_C++)(哈希表;哈希集合;排序+遍历;位运算)
c++·leetcode·位运算·哈希表·哈希集合
Dddle14 小时前
C++:this指针
java·c语言·开发语言·c++
不見星空5 小时前
2025年第十六届蓝桥杯软件赛省赛C/C++大学A组个人解题
c语言·c++·蓝桥杯
jiunian_cn5 小时前
【c++】异常详解
java·开发语言·数据结构·c++·算法·visual studio
梁下轻语的秋缘5 小时前
每日c/c++题 备战蓝桥杯(洛谷P1387 最大正方形)
c语言·c++·蓝桥杯
熬夜学编程的小王5 小时前
【C++进阶篇】多态
c++·多态·静态绑定与动态绑定
UpUpUp……6 小时前
Linux--JsonCpp
linux·运维·服务器·c++·笔记·json