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

时间:2014-08-24 20:59:16

标签: c++ struct initialization memset

在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.

For For循环

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

但在memset函数中我无法初始化具有不同值的结构数组。可能吗 ??

1 个答案:

答案 0 :(得分:3)

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

  

memset - 将ptr指向的内存块的第一个num字节设置为   指定的值(解释为unsigned char)。

因此,你无法达到你想要的效果。

这是构造函数的用途:

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);