这个问题是关于用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语句传递给数组的大小。
是否有更好,更快的方式来分类百万项?
谢谢。
答案 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。