有没有一种方法在c ++中初始化一些类对象的数组而不首先定义大小

时间:2011-06-14 07:30:16

标签: c++ arrays c++11

我使用这样的代码:

const vector<filterStat> someArray={
        {"Ana",1},
        {"Bob",2},
        {"Charlie",5},
};
static const int knElements=filterStats.size();

忽略kn前缀,这是我说的不变,大小的方式。 我发现它很有用,因为我不必在更改向量的初始化时更改或计算knElements。但问题是使用const向量困扰我,因为向量是可调整大小的数组,因此感觉不对。顺便说一句,如果你想知道为什么我需要它 - 长故事,它是一种地图,但我不做任何搜索或插入,只是“为每个”所以阵列是最好的选择。

编辑: 我把我的鳕鱼改成了这个并编译:

const   filterStat filterStats[]={
//...
};

static const int knFilterStats=sizeof(filterStats)/sizeof(filterStats[0]);
static_assert(sizeof(filterStats),"Can't run statistics-no filterStats exists");

我不知道你可以用c ++做[]。抱歉愚蠢的问题,我希望它对某人有所帮助。

2 个答案:

答案 0 :(得分:5)

您正在寻找std::array

const std::array<filterStat, 3> = {
    {"Ana",1},
    {"Bob",2},
    {"Charlie",5},
};

但是,您必须指定大小。

答案 1 :(得分:2)

const向量是一件非常好的事情 - 你的代码是正确的做事方式。