我有一个很大的阵列:
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!