当前位置: 首页 > article >正文

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

定义

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

主要用途
  1. 初始化容器
    使用列表初始化方式为容器赋值。

    #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. 构造函数重载
    用于支持构造函数接受多参数的初始化列表。

    #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. 函数参数
    用于函数接收可变数量参数的情景,提供了一种更直观的方式。

    #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 更适合复杂的动态数组操作。
示例代码对比

数组与初始化列表对比

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


http://www.kler.cn/a/514480.html

相关文章:

  • 计算机毕业设计hadoop+spark股票基金推荐系统 股票基金预测系统 股票基金可视化系统 股票基金数据分析 股票基金大数据 股票基金爬虫
  • [Computer Vision]实验三:图像拼接
  • Servlet快速入门
  • 【分布式架构设计理论1】架构设计的演进过程
  • Java自定义多队列线程池
  • CSS语言的数据类型
  • 深度探索 Java 的字节码增强
  • 如何在Anaconda中顺利安装PyTorch:解决依赖问题的攻略
  • Day 15 卡玛笔记
  • 30天开发操作系统 第 17 天 -- 命令行窗口
  • Linux下 date时间应该与系统的 RTC(硬件时钟)同步
  • 什么是 Flask 的蓝图(Blueprint)
  • Windows远程连接Docker服务
  • openssl 生成证书 windows导入证书
  • 大数据Hadoop中MapReduce的介绍包括编程模型、工作原理(MapReduce、MapTask、ReduceTask、Shuffle工作原理)
  • RLHF技术应用探析:从安全任务到高阶能力提升
  • 摄影交流平台项目Uniapp+Springboot已完成
  • Spark SQL 中对 Map 类型的操作函数
  • spring cloud之gateway和JWT回顾
  • 用底层逻辑看问题:解锁深度洞察的技巧
  • HTML5 Canvas和JavaScript的3D粒子星系效果
  • 25/1/22 算法笔记<ROS2> TF变换
  • 从零到上线:Node.js 项目的完整部署流程(包含 Docker 和 CICD)
  • Python中采用.add_subplot绘制子图的方法简要举例介绍
  • NIO 和 Netty 在 Spring Boot 中的集成与使用
  • mapbox加载geojson,鼠标移入改变颜色,设置样式,vue中使用方法