gpt4 book ai didi

c++ - 如何正确初始化 std::array 的 vector ?

转载 作者:行者123 更新时间:2023-11-28 00:20:58 26 4
gpt4 key购买 nike

首先,我有一个模板数据结构,它可以使用数字索引访问元素。指数可以是负数。

class RangeList
{
public:
RangeList(PosType off_min, PosType off_max)
: _off_min(off_min)
, _off_max(off_max)
, data(off_max - off_min + 1) {}

T& operator[] (PosType i)
{ return data[i-_off_min]; }

const T& operator[] (PosType i) const
{ return data[i-_off_min]; }

size_t size()
{ return data.size(); }

protected:
PosType _off_min;
PosType _off_max;
std::vector<T> data;
};

我使用 C++11 std::array 来表示一些固定长度的数据配置文件:

typedef std::array<float, std::numeric_limit<uint16_t>::max()> ProfileType;

当这两件事结合在一起时,问题就出现了:

typedef RangeList<ProfileType> ProfileRangeList;

内部RangeList , data成员类型为 vector<array<float, 65536> > .

我注意到,如果你在堆栈上创建一个 std::array,它的内容将是未初始化的,你需要明确地将它的内容设置为零。那么如果 std::array 是 std::vector 的值类型会怎样呢?

在我的测试代码中,似乎内容被神奇地初始化为零,但我不知道它是否符合语言标准以及是否可靠和可重现。

最佳答案

我想您的如果您在堆栈上创建数组 意味着类似于:

std::array<T,s> arr;

不过这也是有效的:

std::array<T,s> arr {};

这将对每个字段进行值初始化。这就是 vector 所做的(对它的每个 array 元素),所以你是安全的。

关于c++ - 如何正确初始化 std::array 的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27522536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com