长度std ::数组像
由于我通常使用的C ++编译器允许可变长度的数组(例如数组,取决于运行时的大小),我想知道是否有像可变大小的std::array
这样的东西? 当然, std::vector
的大小是可变的,但它在堆上分配,并根据需要重新分配。
我喜欢在运行时定义大小的堆栈分配数组。 是否有任何std
模板可能具有此功能? 也许使用固定的最大尺寸的std::vector
?
目前有两个建议将运行时固定大小的数组引入到C ++中,这可能会对您感兴趣:
具有自动存储持续时间的运行时大小的阵列。 这将使运行时大小的数组成为一种语言功能(如C11)。 所以你可以这样做:
void foo(std::size_t size) {
int arr[size];
}
C ++动态数组。 这会给库带来一个新的容器, std::dynarray
,它在构造时被赋予一个固定的大小。 它的目的是尽可能优化分配到堆栈上。
void foo(std::size_t size) {
std::dynarray<int> arr(size);
}
这些都是作为数组扩展技术规范的一部分,它将与C ++ 14一起发布。
正如Daniel在注释中所说的那样, std::array
大小被指定为模板参数,所以在运行时不能设置它。
你可以通过构造函数参数传递最小容量来构造std::vector
:
#include <vector>
int main(int argc, char * argv[])
{
std::vector<int> a;
a.reserve(5);
std::cout << a.capacity() << "n";
std::cout << a.size();
getchar();
}
但。 静态向量的内容将存储在堆中,而不是堆栈中。 问题在于,编译器必须知道,在函数执行之前应该为该函数分配多少空间,因此根本无法将可变长度数据存储在堆栈上。
链接地址: http://www.djcxy.com/p/18575.html