比普通循环和集合更快地分配和初始化数组的一些方法

时间:2014-07-02 07:46:49

标签: c++ arrays pointers

这是我在C ++中分配和初始化数组的方法。

char *dataPtr;

dataPtr= new char [40000]; 

int i; 

for(i=0;i<40000;i++)

{
    dataPtr[i]=200; 
}

还有其他更快更清洁的方法来实现这一点,因为for循环需要相当长的时间才能完成我的应用程序吗?

3 个答案:

答案 0 :(得分:4)

使用std::vector

std::vector<char> data(40000, 200);

答案 1 :(得分:4)

您可以在运行时使用memset(),它具有优化程序集的核心和SSE / SSE2 / etc指令。 memset()函数旨在完成此任务:尽可能快地将char数组中的每个char设置为特定值。

#include <cstring>

char *dataPtr = new char[LENGTH];
std::memset(dataPtr, 200, LENGTH);

但是,现代编译器会为您执行此操作,您可以检查程序集,并且您可能会在使用memset()循环的原始代码中找到for或类似内容的调用。它无论如何只有40 kB,所以你不会节省太多时间,除非你必须经常初始化数组。

答案 2 :(得分:3)

要按200初始化每个数组元素,您可以使用

std::fill_n(dataPtr, 40000, 200);