变长std :: array like

dro*_*nus 17 c++ std variable-length-array

由于我通常使用的C++编译器允许可变长度数组(例如,数组取决于运行时大小),我想知道是否有类似std::array可变大小的东西?当然std::vector是可变大小,但它在堆上分配,并根据需要重新分配.

我喜欢堆栈分配的数组,其大小在运行时定义.是否有任何std可能具有此功能的模板?也许使用std::vector固定的最大尺寸?

Jos*_*eld 14

目前正在处理两个提案,将运行时固定大小的数组引入C++,这可能是您感兴趣的:

这些都是作为Array Extensions技术规范的一部分进行的,它将与C++ 14一起发布.

  • 所以第二个看起来真的很不错。截至今天有实施吗? (2认同)
  • @JosephMansfield也许这应该合并到[这里](http://stackoverflow.com/questions/1887097/variable-length-arrays-in-c)? (2认同)

Spo*_*ook 6

正如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)

但.仍然向量的内容将存储在堆上,而不是存储在堆栈中.问题是,编译器必须知道,在执行之前应该为函数分配多少空间,因此根本不可能在堆栈上存储可变长度的数据.

  • 您所做的并不是真正设置*通过构造函数参数*的最小容量。这样做的目的是设置初始大小,并且因为 `size&lt;=capacity` 这是有效的。设置容量使用`reserve`。 (2认同)
  • 这是基于堆的,这就是我不想要它的原因,并提出了我的问题...但是,如果可以实现 `std::vector` 以在堆栈上分配其初始容量,并切换到堆上第一次重新分配。这不适用于“reserve”,因为它必须在第一次分配时完成......但会很酷。但我怀疑它在通常的实现中是这样工作的。 (2认同)