c ++数组容器中的数组大小是否有上限?

时间:2015-07-26 18:42:18

标签: c++ arrays xcode sorting

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

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

适用的代码声明如下所示。

请注意,我在这里重新输入了代码,因此输入错误是可能的。我希望基本的想法足够让你看到发生了什么。

action="target.php"

以下代码位于主

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

我的问题是......数组容器是否有上限?如果有,我怎么知道它是什么,有没有work_around? max_size语句只返回#define语句传递给数组的大小。

是否有更好,更快的方式来分类百万项?

谢谢。

2 个答案:

答案 0 :(得分:4)

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

如果它是一个函数内的局部变量(&#34;错误的访问&#34;在您的错误消息中显示这是个案,但是您的代码示例中不清楚) ,因为std::array占用了堆栈空间,所以限制就是堆栈大小。如果您希望LOCAL变量包含大量项目,请使用std::vector,它将动态分配,然后受到计算机内存量的限制[如上所述]。

还有很多其他方法可以解决此问题,但std::vector<double> A1(ARRAY_SIZE);是最简单的版本,它只需要一次调用new double[ARRAY_SIZE];,这可能在您的整体运行时间中不明显如果你填写和排序100万条目的内容。

答案 1 :(得分:4)

对于std::array,它与普通C数组相同,因此请查看here