如何快速清除DWORD指针数组
How to quickly clear DWORD pointer array?
这是我的代码。
DWORD *dwDSE = new DWORD[4096];
这是我清除它的[低效]方法:
for (INT k=0;k<4096;k++)
dwDSE[k] = 0;
清除/初始化为零的最好方法是什么?
可以将其初始化为0
DWORD *dwDSE = new DWORD[4096](); //Note the empty parenthesis ()
使用memset:
memset(dwDSE,0,4096*sizeof(DWORD));
除非你有一个非常糟糕的编译器,这是最有效的方法应该是:
std::fill_n( dwDSI, 4096, 0 );
这应该会生成与循环相同的代码(即也是非常有效的),并且在许多情况下,将是显著的比memset
更有效率,而后者通常是最差的(当然,只适用于特殊值0)
当然,你通常不会做new DWORD[4096]
无论如何。如果你写:
std::vector<DWORD> dwDSI( 4096 );
你会得到它已经初始化为0,你不会泄漏它异常情况。如果遗留接口需要它(这是人们使用DWORD
的唯一原因),你可以使用&dwDSI[0]
或dwDSI.data()
获取原始指针c++ 11。
对另一个答案的评论让我意识到一个要点:你真的需要动态地分配数组吗?如果不是,
DWORD dwDSI[4096] = {};
是最佳解决方案。(= {}
确保初始化0。)
在这种情况下可以使用memset函数
std::memset(dwDSE, 0, sizeof(dwDSE)*4096);
或fill_n函数:
std::fill_n(dwDSE, 4096, 0);
相关文章:
- 指向指向字符数组的指针数组的指针
- 通过指向指针数组的指针访问子类的属性
- C++,指针数组,指向双链表中的条目
- 在C++中,如何初始化指向wchar_t*的指针数组(生成wchar_t**)
- C++从函数指针数组调用函数
- 关于指向指针数组的指针
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 将链表转换为指针数组时出错
- C++ 对象指针数组的复制构造函数
- C++ - 循环访问指针数组会导致错误
- 删除指针数组 (C++) 中的元素
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 将函数指针数组中的函数指针作为模板参数传递
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 具有推导参数的模板函数指针数组变量
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- C++指针数组到字符数组中的特定位置
- 如何在C++中复制指针数组的数据
- 初始化类中的指针数组,并在另一个类中检索它
- 尽管直接设置了指针数组,但仍为空