c++中使用memset初始化具有不同值的struct数组元素

initialize struct array element with different value using memset in c++

本文关键字:数组元素 struct memset 初始化 c++      更新时间:2023-10-16

在c++中,

struct info
{
    int lazy,sum;
}tree[4*mx];

初始化:

memset(tree,0,sizeof(tree))

意思是

tree[0].sum is 0 and tree[0].lazy is 0 ...and so on.

现在我想初始化不同的值,像这样:

tree[0].sum is 0 and tree[0].lazy is -1 .... and so on.

In For循环

for(int i=0;i<n;i++) // where n is array size
{
    tree[i].sum=0;
    tree[i].lazy=-1;
}

,但在memset函数我不能初始化结构数组与不同的值。这可能吗?

传递给memset的值是初始化给定地址范围的每个字节的值。

memset -将ptr所指向的内存块的前num字节设置为

这样,你就不能实现你想要的。

这就是构造函数的作用:
struct info
{
    int lazy,sum;
    info() : lazy(-1), sum(0) {}
} tree[4*mx];
// no need to call memset

或者您可以创建结构体的模式并将其设置为tree的每个元素:

#include <algorithm>
struct info
{
    int lazy,sum;
} tree[4];
info pattern;
pattern.lazy = -1;
pattern.sum = 0;
std::fill_n(tree, sizeof(tree)/sizeof(*tree), pattern);