用C++创建一个大数组

Yon*_*ing 10 c++

可能重复:
大型阵列上的分段错误

大家好

我正在尝试使用C++在VS 2010中创建一个非常大的数组.

当我尝试创建如下所示的数组时

int dp[4501][4501]
or
int dp[1000][1000]
Run Code Online (Sandbox Code Playgroud)

它引发了异常"Stack Overflow"然后我将其更改为:

int dp[100][100]
Run Code Online (Sandbox Code Playgroud)

一切都好.

所以,如果我想创建一个像上面这样的大数组,我该怎么办?

最好的祝福,

vpi*_*833 9

使用动态分配或STL.最近有一个关于一个非常相似问题的帖子.看到这个.


Mar*_*ger 6

把它放在 .

  • 它们没有明显的错误,特别是在理解这个目标的层面上. (3认同)

GMa*_*ckG 5

你应该使用动态分配:

typedef std::vector<int> int_vector;
int_vector dp(10000);
Run Code Online (Sandbox Code Playgroud)

可以通过嵌套数组来模拟双数组:

typedef std::vector<int_vector> int_double_vector;
int_double_vector dp(4501, int_vector(4501));
Run Code Online (Sandbox Code Playgroud)

  • 我不喜欢像这样使用的typedef.为什么?简单:你的`int_array`实际上是一个*int***vector**,你的`int_double_array`与**double**完全无关.(另外我必须做*两个*查找以找出它实际上是什么.)糟糕的风格,恕我直言.仅使用typedef来表示非常复杂或含糊不清的东西,即使这样,只有在整个代码中它们的声明频繁出现时才会使用.(对象的向量映射的迭代器,或函数指针的想法.)对于使用但两次或三次的声明,它们是混淆的工具. (4认同)
  • @ypnos:经过10年的C++维护编码,我实际上更喜欢没有typedef的代码.是的,包括`std :: vector <std :: vector <int >>> :: const_iterator`和类似的东西.根据我的经验,有用的typedef与模糊的比例是大约20分之一. (4认同)
  • int_double_vector _really_的措辞很糟糕.你应该像2d_int_vector那样做.除此之外,typedef没有问题,它比使用std :: vector <std :: vector <int >>> :: iterator更好...... (2认同)