我分配了一个大的双向量,假设有 100000 个元素。在我的代码中的某个时刻,我想将所有元素设置为一个恒定的非零值。如何在不对所有元素使用 for 循环的情况下做到这一点?如果有帮助,我也在使用 blas 包。
问问题
2174 次
3 回答
9
您可以使用std::fill
( #include <algorithm>
):
std::fill(v.begin(), v.end(), 1);
当然,这本质上也只是一个循环..
于 2011-03-10T13:40:57.760 回答
3
“填充”与您所说的一样。
请注意,也可以构造一个充满指定值的向量:
std::vector<double> vec(100000, 3.14);
因此,如果“在某个时候”的意思是“在施工后立即”,请改为这样做。此外,这意味着您可以这样做:
std::vector<double>(100000, 3.14).swap(vec);
如果“在某个时候”意味着“在更改大小后立即”,并且您希望/希望重新分配向量(如果您要使其大于其先前容量,则“期望”,“想要”如果您'让它变得更小,并希望它被修剪以节省内存)。
于 2011-03-10T14:08:23.370 回答
0
memset()
如果你不想循环,你总是使用。
也就是说,memset(myarr, 5, arrsize);
为了用所有 5 填充它。谨防隐式转换为无符号字符。
概要
#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 来选择最佳算法(循环、展开循环、带有 rep 前缀的指令或库调用)。
于 2011-03-10T13:46:00.487 回答