[原创](Modern C++)现代C++的数组初始化技巧大全:最时髦、最完整的方法

[简介]
常用网名: 猪头三
出生日期: 1981.XX.XX
QQ联系: 643439947
个人网站: 80x86汇编小站
编程生涯: 2001年~至今[共23年]
职业生涯: 21年
开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python
开发工具: Visual Studio、Delphi、XCode、Eclipse、C++ Builder
技能种类: 逆向 驱动 磁盘 文件
研发领域: Windows应用软件安全/Windows系统内核安全/Windows系统磁盘数据安全/macOS应用软件安全
项目经历: 磁盘性能优化/文件系统数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测

[序言]
随着C++11, C++14以及后续版本C++ 20的更新, 现代C++提供了多种高效且安全的方式来初始化数组, 让C++代码变得更加简洁和现代化. 本篇文章将介绍五种不同的方法来初始化C++数组.

[方式1: 直接初始化]
使用大括号 "{}" 提供值列表给对象

int* pint_Array_Demo = new int[5]{};          // 初始化为 {0, 0, 0, 0, 0}
int* pint_Array_Demo = new int[5]{1, 2, 3};   // 初始化为 {1, 2, 3, 0, 0}
int int_Array_Demo[5]{};                      // 初始化为 {0, 0, 0, 0, 0}
int int_Array_Demo[5]{1, 2, 3};               // 初始化为 {1, 2, 3, 0, 0}

[方式2: 使用std::fill_n()初始化]
std::fill_n()是C++标准库中的一个函数, 可以接收三个参数:目标内存地址, 元素个数和要填充的值

int* pint_Array_Demo = new int[5];
std::fill_n(pint_Array_Demo, 5, 0);           // 初始化为 {0, 0, 0, 0, 0}

[方式3: 高级技巧1: 使用std::vector()动态容器代替]
std::vector是C++标准库中的一个动态容器, 对于需要动态调整大小的数组, 可以使用std::vector()来代替传统数组, 它提供了更灵活的操作.

std::vector<int> int_Array_Demo(5, 0); // 所有元素初始化为0

[方式4: 高级技巧2: 使用std::array()固定容器代替]
如果你知道数组的大小且不需要动态调整, 可以使用std::array(), 它的操作方式与原始数组操作类似,但添加了安全检查和更好的可读性. 同时std::array()也是C++标准库中的一个容器.

std::array<int, 5> int_Array_Demo{};         // 初始化为 {0, 0, 0, 0, 0}

[方式5: 高级技巧3:使用std::unique_ptr()和std::fill_n()配合]
当必须使用动态分配原始数组时, 可以使用std::unique_ptr()来智能地管理内存释放, 它确保在代码生命周期结束时自动销毁动态分配的内存,避免内存泄漏.

auto pint_Array_Demo = std::make_unique<int[]>(5);
std::fill_n(pint_Array_Demo.get(), 5, 0); 

[总结]
总之, 现代C++提供了多种高效且安全的方式来初始化数组, 每种方式都有其优缺点和适用场景. 直接初始化是最基本且广泛使用的方式, 但是对于大型数组而言可能会带来一些问题。std::fill_n()函数提供了更加灵活的初始化方式, 但是需要额外一行代码并且对动态分配的数组需要手动管理内存释放. std::vector()和std::array()都是现代C++中常用的容器类型, 它们提供了更多的功能和安全性, 但是相对于原始数组而言会有一些额外的开销, 如果必须要使用动态分配原始数组, 那么可以使用std::unique_ptr()来管理内存, 它提供了更好的资源管理和异常安全性. 无论选择哪种方式, 都应该根据实际需求进行权衡和选择.

猜你喜欢

转载自blog.csdn.net/Code_GodFather/article/details/143337708