Yod*_*oda 6 c++ arrays performance
我有一个很大的阵列:
int* arr = new int[BIGNUMBER];
Run Code Online (Sandbox Code Playgroud)
如何用1号码快速填充它.通常我会这样做
for(int i = 0; i < BIGNUMBER; i++)
arr[i] = 1
Run Code Online (Sandbox Code Playgroud)
但我认为这需要很长时间.
我可以使用memcpy或类似吗?
And*_*owl 13
您可以尝试使用标准功能std::uninitialized_fill_n:
#include <memory>
// ...
std::uninitialized_fill_n(arr, BIGNUMBER, 1);
Run Code Online (Sandbox Code Playgroud)
在任何情况下,当涉及到性能时,规则是总是进行测量以支持您的假设 - 特别是如果您要放弃一个清晰,简单的设计来接受更复杂的设计,因为所谓的性能改进.
编辑:
请注意 - 正如本杰明林德利在评论中提到的那样 - 对于琐碎的类型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, BIGNUMBER, my_object(42)); // UB!
Run Code Online (Sandbox Code Playgroud)