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

K17*_*K17 1 c++ arrays sorting xcode

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

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

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

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

#define ARRAY_SIZE 1000000
#include <iterator>
#include <array>
Run Code Online (Sandbox Code Playgroud)

下面的代码在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.
Run Code Online (Sandbox Code Playgroud)

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

有没有更好、更快的方法来对一百万件物品进行排序?

谢谢你。

Mat*_*son 5

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

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

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