使用非零值初始化双数组(blas)

时间:2011-03-10 13:37:30

标签: c++ c blas

我已经分配了一个大的双向量,让我们说100000元素。在我的代码中的某个时刻,我想将所有元素设置为常量非零值。如果不对所有元素使用for循环,我该怎么做? 我也在使用blas包,如果有帮助的话。

3 个答案:

答案 0 :(得分:9)

您可以使用std::fill#include <algorithm>):

std::fill(v.begin(), v.end(), 1);

这当然也只是一个循环..

答案 1 :(得分:3)

'fill'就是你所说的。

请注意,也可以构造一个充满指定值的向量:

std::vector<double> vec(100000, 3.14);

因此,如果“在某个时刻”意味着“在施工后立即”,请改为执行此操作。此外,这意味着你可以这样做:

std::vector<double>(100000, 3.14).swap(vec);

如果“在某些时候”意味着“在更改大小后立即”,并且您希望/希望重新分配该向量(如果您使其大于其先前容量,则“期望”),这可能是有用的,“想要“如果你让它变得更小,并希望它被修剪以节省内存。”

答案 2 :(得分:0)

如果您不想循环,则始终使用memset()

也就是说,memset(myarr, 5, arrsize);以填充全部5个。注意隐式转换为unsigned char。

  

概要

 #include <string.h>

 void *
 memset(void *b, int c, size_t len);
     

说明

 The memset() function writes len bytes of value c (converted to an
 unsigned char) to the byte string b.

如果矢量很大,你需要快速使用gcc,那么:

  

块移动的代码生成(memcpy)   和块集(memset)被重写。   GCC现在可以选择最好的算法   (循环,展开循环,指令   基于的重复前缀或库调用   要复制的块的大小   CPU正在优化。