c++ 如何实现数组快速赋相同的值

数组赋值方式性能比较
测试代码:

#include #include #include #include #include int main() {//-----------测试char数组---------- char b[1000000]; // 测试memset clock_t mem_start = clock(); memset(b, 1, 1000000); clock_t mem_end = clock(); // 测试标准库算法fill clock_t fill_start = clock(); std::fill_n(b, 1000000, 1); clock_t fill_end = clock(); // 测试for循环赋值 clock_t for_start = clock(); for (int i=0; i<1000000; i++){ b[i] = 1; } clock_t for_end = clock(); std::cout<<"test char array : "< "<<(mem_end-mem_start)<<" ms"< "<<(fill_end-fill_start)<<" ms"< "<<(for_end-for_start)<<" ms"< "<<(fill_end-fill_start)<<" ms"< "<<(for_end-for_start)<<" ms"<

测试代码输出结果:
test char array : memset cost time -> 1409 ms fill cost time -> 1990 ms for cost time -> 1872 mstest no char array : fill cost time -> 2523 ms for cost time -> 1915 ms

结论:
从测试结果可以看出:
(1) 对于char类型数组,使用memset函数赋相同初始值最优;
(2) 对于非char类型数组,使用for循环赋相同初始值最优;
(3) 使用标准库函数fill_n进行赋初值性能最差.
为什么只有char类型数组可以用memset ?
【c++ 如何实现数组快速赋相同的值】测试代码:
#include #include #include int main() {//------测试char数组------ char b[3]; memset(b, 1, sizeof(b)); //------测试非char数组------ int a[5]; memset(a, 1, sizeof(a)); std::cout<<"test char value : "<<(int)b[0]<<" "<<(int)b[1] <<" "<<(int)b[2]<
输出结果:
test char value : 1 1 1 test no char value : 16843009 16843009 16843009

原因
memset是按字节进行赋值,一个int类型是4个字节,所以单个int数组元素值为: 00000001 00000001 00000001 00000001,转换成10进制数即为16843009.
因此对于非char类型数组不推荐使用memset !!!

    推荐阅读