c++数组容器中数组的大小是否有上限?
Is there an upper limit on size of an array in a c++ array container?
这个问题是关于用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数组相同,所以看这里。
- 如何找到大小'x'数组是否完全填充,在C++?
- 任意大小的 constexpr 数组是否可以用作 switch 语句中的案例?
- 在 constexpr 构造函数中初始化数组是否合法?
- 以这种方式初始化的 char 数组是否会自动添加空终止符?
- 检查反向数组是否与原始数组相同
- 如何检查二维字符数组是否有空字
- 检查数组是否等于的最快方法?
- 确定数组是否可以旋转 3 个连续的数组元素进行排序?
- 如何检查数组是否包含多个元素?
- 我在代码中收到一个运行时错误,该错误如何通过修改最多一个元素来查找数组是否可以变得不减少
- c ++ 如何断言 char 数组与否,检查 char 数组是否以 "0" 开头或包含"0"
- 下课时的数组是否可以正常工作?
- C++全局常量数组:是否保证合并(优化)到一个副本中
- 在 C++17 中声明大小为 0 的数组是否合法
- 如果在执行过程中替换二进制文件,"const"数组是否驻留在内存中?
- 临时数组是否可能
- 使用二维数组作为一维数组是否正确?可能会导致未定义的行为左右?
- 当有多个查询时,检查某些子数组是否排序的有效方法是什么?
- 用于检查 char 数组是否仅包含允许的字符的函数
- 检查数组是否'right' (C++)