如何在运行时创建不同长度的c ++数组

时间:2017-09-02 07:10:12

标签: c++ arrays

我是c ++的初学者。 我想在运行时创建不同大小的多个数组。 我尝试了以下编译和运行的代码。但在与谷歌搜索的其他答案进行比较后似乎并不合适。大多数结果表明它应该使用new和delete或vector或其他一些库实现来完成。任何人都可以帮助指出它有什么问题吗?

void Basics::TestArray(int length){
      int arr[length];
      for(int i=0;i<length;i++){
          arr[i] = i;
      }
}

2 个答案:

答案 0 :(得分:2)

可变长度数组(VLA)是C99的特色。标准C ++不支持它。一些C ++编译器提供对VLA的支持作为编译器扩展,但我会远离它。

在C ++中实现相同目标的最佳方法 - 使用std :: vector

std::vector<int> arr(length);
for(auto i=0;i<arr.size();i++){
      arr[i] = i;
}

答案 1 :(得分:0)

void Basics::TestArray(int length){
  int *arr =new int[length];
  for(int i = 0; i < length; i++) {
      arr[i] = i;
  }
  //do something with your array before it gets deleted
  delete []arr;
}

我很惊讶您编译的代码没有错误,因为'length'需要在该代码中保持不变。

上面是一种可以使用指向数组的指针来完成的方法,但请注意,如果使用'new'关键字,则必须删除数组,否则会泄漏内存。 (因为数组是在函数中创建的,所以必须在退出函数之前将其删除,因为它将超出范围,并且无法再次访问它。)

如果你真的想以这种方式使用动态数组,我认为最好创建一个包装类,当它超出范围时可以在析构函数中自动删除它。 但是,建议使用上面建议的std :: vector类。