c – 如何使用1个非常大的数组快速初始化

前端之家收集整理的这篇文章主要介绍了c – 如何使用1个非常大的数组快速初始化前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个很大的阵列:
int* arr = new int[BIGNUMBER];

如何用1号码快速填充它.通常我会这样做

for(int i = 0; i < BIGNUMBER; i++)
    arr[i] = 1

但我认为这需要很长时间.

我可以使用memcpy或类似的吗?

解决方法

您可以尝试使用标准功能 std::uninitialized_fill_n
#include <memory>

// ...

std::uninitialized_fill_n(arr,BIGNUMBER,1);

在任何情况下,当涉及到性能时,规则是总是进行测量以支持您的假设 – 特别是如果您要放弃一个清晰,简单的设计来接受更复杂的设计,因为所谓的性能改进.

编辑:

请注意 – as Benjamin Lindley mentioned in the comments – 对于普通类型std :: uninitialized_fill_n没有比更明显的std::fill_n带来任何优势.对于非平凡类型存在优势,因为std :: uninitialized_fill将允许您分配内存区域然后构造对象到位.

但是,不应该陷入为未初始化的内存区域调用std :: uninitialized_fill_n的陷阱.例如,以下内容将给出未定义的行为:

my_object* v = new my_object[BIGNUMBER];
std::uninitialized_fill_n(my_object,my_object(42)); // UB!
原文链接:https://www.f2er.com/c/117748.html

猜你在找的C&C++相关文章