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

Is there an upper limit on size of an array in a c++ array container?

本文关键字:数组 是否 c++      更新时间:2023-10-16

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

在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语句传递给数组的大小。

是否有更好、更快的方法来对一百万项进行排序?

谢谢。

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

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

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

对于std::array,它与普通C数组相同,所以看这里。