【问题标题】:Difference between the methods of instantiating array实例化数组方法的区别
【发布时间】:2014-01-04 07:16:15
【问题描述】:

假设在一个问题中我们必须声明一个 n 大小的数组,其中1 <= n <= 1000000000

有两种(可能更多)方法可以做到这一点:

  1. int arr[1000000001]; 并且可以根据输入的需要使用空间。
  2. 可以先询问用户数组的大小,然后实例化数组:

    cin>>n; int arr[n];

我想知道这两种方法的优缺点是什么。

【问题讨论】:

    标签: c++ arrays


    【解决方案1】:

    两种方法的区别在于:

    第一种方法符合标准,第二种方法不符合标准。 C++ 标准不允许变长数组。编译器支持它们作为扩展,但严格意义上的使用不可移植。

    第一种方法的风险在于,即使不需要,也可能会耗尽堆栈空间或浪费内存。在这种情况下,最好的解决方案是使用std::vector

    【讨论】:

    • 他们之间哪一个更快?向量不如数组快,因此不能总是使用该选项。
    • @user3159685 你真的对你的程序进行基准测试,看看数组的类型是否会导致瓶颈吗?如果不是,那么不要担心(无论如何,vector::operator[] 将使用任何现代、体面的编译器和 stdlib 实现优化为单指针算术 + 加载或存储指令)。然而,如果这个实际上是瓶颈,那么你总是可以选择operator new
    猜你喜欢
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多