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 提供了一种便捷但只读的方式来初始化或传递一组值,非常适合初始化容器和自定义类型。

相关推荐
不染尘.2 小时前
2025_11_7_刷题
开发语言·c++·vscode·算法
似水এ᭄往昔2 小时前
【C++】--stack和queue
开发语言·c++
仰望—星空2 小时前
MiniEngine学习笔记 : CommandListManager
c++·windows·笔记·学习·cg·direct3d
怕什么真理无穷3 小时前
C++面试4-线程同步
java·c++·面试
fpcc4 小时前
c++23中的print和println
c++·c++23
wanhengidc5 小时前
云手机能够流畅运行大型游戏吗
运维·服务器·游戏·智能手机·云计算
玉树临风江流儿5 小时前
C++左值、右值、move移动函数
开发语言·c++
许长安6 小时前
c/c++ static关键字详解
c语言·c++·经验分享·笔记
Murphy_lx6 小时前
C++ thread类
开发语言·c++
月夜的风吹雨6 小时前
【C++ STL 深度剖析】:vector 底层模拟实现与核心陷阱解析
c++·vector·类和对象·visual studio