【问题标题】:Is there an upper limit on size of an array in a c++ array container?c++ 数组容器中的数组大小是否有上限?
【发布时间】:2015-07-26 18:42:18
【问题描述】:

这个问题是关于在 c++ 中使用数组容器进行排序的。我正在对排序代码进行一些比较。我在 Mac Xcode 中的 c++ 中有一个冒泡排序和一个数组容器。任务是构建一个随机数数组,然后对这些数字进行排序,看看完成排序需要多长时间。冒泡排序对 100,000 个随机数需要 59 秒,对 1,000,000 个随机数需要 6,086 秒。我没有要求冒泡排序尝试超过一百万个数字。数组容器需要一秒钟来处理 100,000 个随机数,并且在运行时出现一百万个随机数的数组大小时会失败。在处理任何其他语句之前,故障发生在 main{...} 内部。 main 中的第一条语句是一个简单的 cout

在 Xcode 中,错误信息是:Thread1: EXC_BAD_ACCESS(code=2, address=0xfff5ecbd258)

适用的代码语句如下所示。

请注意,我在这里重新输入了代码,因此可能存在拼写错误。我希望基本的想法足够完整,让您了解发生了什么。

#define ARRAY_SIZE 1000000
#include <iterator>
#include <array>

下面的代码在main里面

std::array<double, ARRAY_SIZE> A1 = {0};

// Here, I have some code that fills array A1 with random numbers using the rand() function

std::sort(A1.begin(), A1.end());

// some code that prints a selection of the A1 array.

我的问题是……数组容器有上限吗?如果有,我怎么知道它是什么,是否有解决方法? max_size 语句只是返回由#define 语句传递给数组的大小。

有没有更好、更快、对一百万个项目进行排序的方法?

谢谢。

【问题讨论】:

标签: c++ arrays xcode sorting


【解决方案1】:

如果它是一个全局变量,那么它很可能仅受您的进程可以使用的内存量的限制[换句话说,您的机器有多少内存,以及操作系统允许进程拥有多少内存,以较低者为准]。

如果它是函数内的局部变量(并且您的错误消息中看到的“错误访问”表明这是这种情况,但从您的代码示例中不清楚),因为std::array 在堆栈上占用空间,限制是您的堆栈大小。如果您想要一个 LOCAL 变量来保存很多项目,请使用std::vector,它将动态分配,然后受到您机器中的内存量的限制[如上所述]。

还有很多其他方法可以解决这个问题,但std::vector&lt;double&gt; A1(ARRAY_SIZE); 是最简单的版本,它只需要一次调用new double[ARRAY_SIZE];,如果您填写和对 100 万个条目的内容进行排序。

【讨论】:

  • 或者如果由于某种原因它必须是std::array,您可以声明它static(但请注意,这有额外的副作用)或在堆上分配它:std::unique_ptr&lt;std::array&lt;int,100&gt;&gt; arr_ptr(new std::array&lt;int,100&gt;&gt;);。不过,这将更难访问。 (也许也把它放在参考文献中?std::array&lt;int,100&gt;&amp; arr = *arr_ptr;
  • 是的,还有其他可行的方法来解决它。但很可能 OP 是初学者,并不真正需要/想要那些额外的选项......
【解决方案2】:

std::array 和普通 C 数组一样,看here

【讨论】:

    猜你喜欢
    • 2020-10-09
    • 2015-05-16
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    相关资源
    最近更新 更多