c++ - c++ 中有没有一种方法可以在不先定义大小的情况下初始化一些类对象的数组

标签 c++ arrays c++11

我使用这样的代码:

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

忽略 kn 前缀,这是我所说的常量,大小。 我发现它很有用,因为我不需要在更改 vector 的初始化时更改或计算 knElements。但问题是使用 const vector 困扰我,因为 vector 是可调整大小的数组,所以感觉不对。顺便说一句,如果您想知道为什么我需要它——说来话长,它有点像 map ,但我不进行任何搜索或插入,只是“针对每个”,因此数组是最佳选择。

编辑: 我将我的 cod 更改为此并编译:

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

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

我不知道您可以在 C++ 中执行 []。对不起,愚蠢的问题,我希望它能帮助别人。

最佳答案

你正在寻找std::array:

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

但是,您必须指定尺寸。

关于c++ - c++ 中有没有一种方法可以在不先定义大小的情况下初始化一些类对象的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6340407/

相关文章:

c++ - 调用 ADL 时,表达式和 namespace 之间是否会发生冲突?

c++ - 分配返回非引用类型引用的函数

c++ - 指向容器上的对象

java - 如何比较各行的总和?

c++ - boost 变换迭代器和 c++11 lambda

c++ - 错误 C2679 : binary '<<' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion)

java - 将 C# 包装器与来自 Java 应用程序的 C API 一起使用时出现异常

c++ - 这是有效的 C++ 代码吗? (在声明范围之外使用本地类型)

ios - 使用 NSDictionary 元素缓慢创建 NSMutableArray

java - java中字节数组的初始化