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