为大型阵列分配内存? [C ++]

时间:2015-09-28 04:35:45

标签: c++ arrays

int *tthousand = new int[10000];  
int *hthousand = new int[100000];
static int tmillion[10000000];

你好,

我试图为一系列数组动态分配内存。然后使用0到10,000,000范围内的随机数填充这些数组。从那里,他们使用快速排序/选择排序进行排序。我遇到的问题是每当" tmillion"到达数组,程序将运行一段时间,然后发生堆栈溢出。

我试过把它写成:

int *tmillion = new int[10000000];

和..

static int tmillion[10000000];

我一定很遗憾。道歉,我对C ++还有点新意。

思想?

1 个答案:

答案 0 :(得分:0)

仅供将来参考。由于C ++ 11 std :: array是在标准库中引入的。它应该优于类似C的内置数组。

示例:

#include <array>
std::array<int, 10000000> myArray;
// fill the array with data
std::sort(myArray.begin(); myArray.end()); // sorts data using default operator <

有关此容器的更多信息,请访问Bjarne主页:http://www.stroustrup.com/C++11FAQ.html#std-array

  

标准容器数组是定义的固定大小的随机访问元素序列。它没有空间开销超出它需要保存它的元素,它不使用免费存储,它可以用初始化列表初始化,它知道它的大小(元素的数量),并且不转换为指针,除非你明确要求它。换句话说,它非常像没有问题的内置数组。

附加示例:

#include <array> // std::array
#include <algorithm> // std::sort
#include <iostream> // std::cout

int main()
{
    std::array<int, 10> myArray = {8, 3, 6, 7}; // array with 10 elements but create it with declaring only first 4 elements

    std::cout << "BEFORE SORT:" << std::endl;
    for (const auto& element : myArray)
    {
        std::cout << element << std::endl;
    }

    std::sort(myArray.begin(), myArray.end()); // sorts data using default operator <

    std::cout << "AFTER SORT:" << std::endl;
    for (const auto& element : myArray)
    {
        std::cout << element << std::endl;
    }
}

输出:

BEFORE SORT:
8
3
6
7
0
0
0
0
0
0
AFTER SORT:
0
0
0
0
0
0
3
6
7
8