18 c++ arrays floating-point initializing
如何在分配期间自动将动态分配的浮点数组设置为零(0.0)
这个可以吗
float* delay_line = new float[filter_len];
//THIS
memset(delay_line, 0.0, filter_len); //can I do this for a float??
//OR THIS
for (int i = 0; i < filter_len; i++)
delay_line[i] = 0.0;
Run Code Online (Sandbox Code Playgroud)
哪种方式最有效
谢谢
Tho*_*day 33
sizeof(float) * filter_len除非你在一些奇怪的实施工作,否则使用sizeof(float) == sizeof(char).
memset(delay_line, 0, sizeof(float) * filter_len);
Run Code Online (Sandbox Code Playgroud)
编辑:正如Stephan202在评论中指出的那样,0.0是一个特别容易浮点的值来编码memset,因为0.0的IEEE标准表示都是零位.
memset在内存领域运行,而不是数字领域.声明为int的第二个参数将强制转换为unsigned char.如果您的C++实现每个float使用四个字节,则以下关系成立:
零是特殊情况.
如果这看起来很奇怪,请记住memset是在<cstring>或<string.h>中声明的,并且通常用于制作"***************"或" - ----------------".它也可以用于零记忆是一个很好的副作用.
正如MilanBabuškov在评论中指出的那样,有一个功能bzero(非标准和弃用),暂时可用于Mac和Linux而不是Microsoft,因为它专门用于将内存设置为零,安全地省略了一些指令.如果您使用它,并且编译器的未来发布版本省略了它,那么在本地兼容性补丁中自己实现bzero是微不足道的,除非将来的版本重新使用该名称用于其他目的.
xto*_*ofl 15
使用
#include <algorithm>
...
std::fill_n( delay_line, filer_len, 0 )
Run Code Online (Sandbox Code Playgroud)
Bru*_*nez 12
通过使用一对空括号跟随数组大小,可以将动态分配的数组的元素初始化为元素类型的默认值:
float* delay_line = new float[filter_len]();
Run Code Online (Sandbox Code Playgroud)
小智 11
改为使用std :: vector:
std::vector<float> delay_line( filter_len );
Run Code Online (Sandbox Code Playgroud)
向量将初始化为零.
| 归档时间: |
|
| 查看次数: |
18925 次 |
| 最近记录: |