长度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

    上一篇: length std::array like

    下一篇: length arrays part of the C++ standard?