C++ C++;——将浮点数组设置为相同值的最快方法

C++ C++;——将浮点数组设置为相同值的最快方法,c++,C++,我天真地认为我可以使用memset来实现这一点,但显然memset只用于chars。是否有一个memset类型的东西可以在一个浮点数组上工作?或者简单迭代是将单个值复制到数组中每个点的最快方法吗?您只需循环并将所有值设置为0(这也是memset所做的): 您可以使用线程,并使用单独的线程初始化子范围。我不会谈论什么代码运行得最快。您应该自己在预期的环境中进行比较 但是,这里有两个可读的、可维护的、正确的解决方案 std::fill(std::begin(array), std::end(arra

我天真地认为我可以使用memset来实现这一点,但显然memset只用于chars。是否有一个memset类型的东西可以在一个浮点数组上工作?或者简单迭代是将单个值复制到数组中每个点的最快方法吗?

您只需循环并将所有值设置为0(这也是
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]));