dro*_*nus 17 c++ std variable-length-array
由于我通常使用的C++编译器允许可变长度数组(例如,数组取决于运行时大小),我想知道是否有类似std::array
可变大小的东西?当然std::vector
是可变大小,但它在堆上分配,并根据需要重新分配.
我喜欢堆栈分配的数组,其大小在运行时定义.是否有任何std
可能具有此功能的模板?也许使用std::vector
固定的最大尺寸?
Jos*_*eld 14
目前正在处理两个提案,将运行时固定大小的数组引入C++,这可能是您感兴趣的:
具有自动存储持续时间的运行时大小的数组.这将使运行时大小的数组成为语言特性(如C11中所示).所以你可以这样做:
void foo(std::size_t size) {
int arr[size];
}
Run Code Online (Sandbox Code Playgroud)C++动态数组.这将为图书馆带来一个新的容器,std::dynarray
在建造时给予固定的尺寸.它旨在被优化以在可能的情况下分配在堆栈上.
void foo(std::size_t size) {
std::dynarray<int> arr(size);
}
Run Code Online (Sandbox Code Playgroud)这些都是作为Array Extensions技术规范的一部分进行的,它将与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();
}
Run Code Online (Sandbox Code Playgroud)
但.仍然向量的内容将存储在堆上,而不是存储在堆栈中.问题是,编译器必须知道,在执行之前应该为函数分配多少空间,因此根本不可能在堆栈上存储可变长度的数据.
归档时间: |
|
查看次数: |
16240 次 |
最近记录: |