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

相关推荐
charlie11451419111 分钟前
深入理解Qt的SetWindowsFlags函数
开发语言·c++·qt·原理分析
呜喵王阿尔萨斯17 分钟前
编程中的英语
c语言·c++
whoarethenext1 小时前
使用 C++/Faiss 加速海量 MFCC 特征的相似性搜索
开发语言·c++·faiss
向阳@向远方2 小时前
第二章 简单程序设计
开发语言·c++·算法
Mr_Xuhhh3 小时前
信号与槽的总结
java·开发语言·数据库·c++·qt·系统架构
liulilittle3 小时前
VGW 虚拟网关用户手册 (PPP PRIVATE NETWORK 基础设施)
开发语言·网络·c++·网关·智能路由器·路由器·通信
ruanjiananquan994 小时前
c,c++语言的栈内存、堆内存及任意读写内存
java·c语言·c++
持梦远方4 小时前
C 语言基础入门:基本数据类型与运算符详解
c语言·开发语言·c++
江理不变情5 小时前
图像质量对比感悟
c++·人工智能
apocelipes6 小时前
记一次ADL导致的C++代码编译错误
c++·开发工具和环境