C++ C++;——将浮点数组设置为相同值的最快方法
我天真地认为我可以使用memset来实现这一点,但显然memset只用于chars。是否有一个memset类型的东西可以在一个浮点数组上工作?或者简单迭代是将单个值复制到数组中每个点的最快方法吗?您只需循环并将所有值设置为0(这也是C++ C++;——将浮点数组设置为相同值的最快方法,c++,C++,我天真地认为我可以使用memset来实现这一点,但显然memset只用于chars。是否有一个memset类型的东西可以在一个浮点数组上工作?或者简单迭代是将单个值复制到数组中每个点的最快方法吗?您只需循环并将所有值设置为0(这也是memset所做的): 您可以使用线程,并使用单独的线程初始化子范围。我不会谈论什么代码运行得最快。您应该自己在预期的环境中进行比较 但是,这里有两个可读的、可维护的、正确的解决方案 std::fill(std::begin(array), std::end(arra
memset
所做的):
您可以使用线程,并使用单独的线程初始化子范围。我不会谈论什么代码运行得最快。您应该自己在预期的环境中进行比较 但是,这里有两个可读的、可维护的、正确的解决方案
std::fill(std::begin(array), std::end(array), 3.14);
或者,如果您有一个动态数组:
std::fill(array, array+size, 3.14);
标准方法是:
std::fill(float_array, float_array + array_size, 0.0f);
我怀疑你可以在没有非标准方法的情况下打败这个标准设施。我推荐
std::fill
std::fill(
floatArray + 0, floatArray + LENGTH
, newValue
);
编译器知道您在这里要做什么,适当的实现可以提供适当的优化。有
memfill
函数
在publib非标准库中。它可以在ubuntu中使用
#include <publib.h>
float a=4.4;
memfill(buf_ptr, buf_size, &a, sizeof(float) );
#包括
浮点数a=4.4;
memfill(buf_ptr、buf_size和a、sizeof(float));
如果您有一个多维浮点数组,则可以执行以下操作:
float myMultiDimensionFloats[5][250];
float myfloats[250];
for(int i=0; i<250;i++)
myfloats[i] = 3.14f; // the value you want to store in each float entry
for(int ii=0; ii<5; ii++)
CopyMemory(myMultiDimensionFloats[ii], &myfloats, sizeof(myMultiDimensionFloats[ii]));
既然内存写入速度是瓶颈,那会有帮助吗?我感觉它会慢一些(即使没有创建线程的开销)+1,我需要更加熟悉标准库的算法代码>您不需要为此编写自己的函数。std::fill很好用。@bames53因此我对Rob的回答发表了评论,当我读他的帖子时,他没有这样做。罗布的答案很快从0票变成了10票!如果编译器支持C++(C++ 11)的当前版本,则可以使用STD::No.()和STD::Enter()函数,而不是试图手动计算数组的末尾。code>fill(begin(floatArray)、end(floatArray)、newValue)@bames53:这假设它是一个静态数组。如果它是一个动态数组,那么它就是一个std::vector,对吗?;)如果将浮点设置为零,则memset可以工作(假设采用标准IEEE 754浮点表示)。不过,你必须正确地计算类型转换和数组大小。也许你可以对你为什么否决投票发表评论——否则我如何改进这篇文章?
#include <publib.h>
float a=4.4;
memfill(buf_ptr, buf_size, &a, sizeof(float) );
float myMultiDimensionFloats[5][250];
float myfloats[250];
for(int i=0; i<250;i++)
myfloats[i] = 3.14f; // the value you want to store in each float entry
for(int ii=0; ii<5; ii++)
CopyMemory(myMultiDimensionFloats[ii], &myfloats, sizeof(myMultiDimensionFloats[ii]));
#define LEN(arr) ((int) (sizeof (arr) / sizeof (arr)[0]))
float myMultiDimensionFloats[5][250];
setarray(myMultiDimensionFloats[0], 3.14f, LEN(myMultiDimensionFloats) * LEN(myMultiDimensionFloats[0]));