Use std::vector
。这是 STL 中运行时大小的数组的类。
它可以让你调整它的大小或将元素推入其中:
auto vec = std::vector<int>{};
vec.resize(10); // now vector has 10 ints 0 initialized
vec.push_back(1); // now 11 ints
评论中指出的一些问题:
矢量接口过多
So is std::array https://en.cppreference.com/w/cpp/container/array。您有超过 20 个功能std::array
包括运营商。
只是不要使用你不需要的东西。您无需为您不会使用的功能付费。它甚至不会增加你的二进制大小。
矢量将在调整大小时强制初始化项目。据我所知,不允许使用operator[]
对于索引 >= 大小(尽管调用reserve
).
这不是它的用途。保留时,您应该使用以下命令调整向量的大小resize
或者将元素推入其中。你说向量会强制初始化元素,但问题是你不能调用operator=
在非构造对象上,包括整数。
这是使用保留的示例:
auto vec = std::vector<int>{};
vec.reserve(10); // capacity of at least 10
vec.resize(3); // Contains 3 zero initialized ints.
// If you don't want to `force` initialize elements
// you should push or emplace element into it:
vec.emplace_back(1); // no reallocation for the three operations.
vec.emplace_back(2); // no default initialize either.
vec.emplace_back(3); // ints constructed with arguments in emplace_back
请记住,对于这种分配和用例,编译器很可能完全省略向量中元素的构造。您的代码中可能没有任何开销。
我建议measure and profile如果您的代码受到非常精确的性能规范的约束。如果您没有这样的规范,则很可能这是过早的优化。内存分配的成本完全地out 测量逐一初始化元素所需的时间。
程序的其他部分可能会被重构,以获得比简单初始化更高的性能。事实上,妨碍它可能会阻碍优化并使你的程序变慢。