如何创建动态整数数组

Sud*_*ha 71 c++

如何使用new关键字在C++中创建动态整数数组?

Jas*_*son 106

int main()
{
  int size;

  std::cin >> size;

  int *array = new int[size];

  delete [] array;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

不要忘记delete你分配的每个数组new.

  • 我不会-1,但如果你甚至可能忘记'删除',你的代码就错了. (24认同)
  • 我同意@Spencer,代码没有错,它很简单,完美的C++。您可能会认为有一种替代方案,将其称为最佳实践等。但这个示例本身并没有什么问题。 (6认同)
  • @GManNickG 我认为你的评论可能不那么教条。代码是正确的,即使它并不理想。智能指针和容器**几乎总是**是更好的选择(特别是在像这样的初学者问题中),但并非“总是”总是。 (5认同)
  • 8 年后,该评论可能会让初学者@GManNickG 感到困惑,删除它怎么样(因为我认为它是在 Jason Iverson 实际删除数组之前制作的)? (3认同)
  • @gsamaras:我同意这令人困惑,但它仍然是正确的:您的代码不应手动删除,您必须记住不要忘记。也就是说,使用了智能指针和其他容器。 (2认同)

Ben*_*igt 49

从C++ 11开始,有一个安全的替代方案new[],delete[]它的零开销不同于std::vector:

std::unique_ptr<int[]> array(new int[size]);
Run Code Online (Sandbox Code Playgroud)

在C++ 14中:

auto array = std::make_unique<int[]>(size);
Run Code Online (Sandbox Code Playgroud)

以上两者都依赖于相同的头文件, #include <memory>

  • 我不知道是不是只有我这么认为,但 C++11 语法看起来太糟糕了。C++14 看起来好多了。再说一遍,自 C++11 之前以来我就没有跟上。记住所有这些新表达方式很困难。 (2认同)

jve*_*zey 25

您可能需要考虑使用标准模板库.它简单易用,而且您不必担心内存分配.

http://www.cplusplus.com/reference/stl/vector/vector/

int size = 5;                    // declare the size of the vector
vector<int> myvector(size, 0);   // create a vector to hold "size" int's
                                 // all initialized to zero
myvector[0] = 1234;              // assign values like a c++ array
Run Code Online (Sandbox Code Playgroud)

  • 好的,但回答实际问题也很好. (14认同)
  • @Ed,问题中的限制似乎相当武断.使用适当的构造函数的`std :: vector`非常有效,应该指出它作为替代方案.有时人们会问这个问题很糟糕,这可能算作其中一个案例 - 它非常简短,并没有给出更喜欢"新"的任何理由. (6认同)
  • @Ed:没有理由使用`new []`代替`std :: vector`。 (2认同)
  • @baash:在C ++中,没有任何原因。如果出于某种原因决定“删除标准库”,那么您将不再使用C ++进行编程。我的评论是针对C ++语言的,而不是针对我在我的设备上使用的C ++语言的。即便如此,您也不必永远手动删除任何内容。同样,`std :: vector`是一个动态数组,对链表没有任何作用。它只是一块内存的包装。 (2认同)
  • @Montdidier:让我们从声明开始:在 C++ 中,所有 `new[]` 的实例都可以替换为 `std::vector`。并且因为`std::vector` 正确地将资源管理与资源使用(SBRM)分开,我们应该这样做。 (2认同)

Ed *_* S. 5

int* array = new int[size];
Run Code Online (Sandbox Code Playgroud)

  • @Lèsemajesté没有理由不使用向量-std :: vector :: data()成员函数将在需要时返回基础原始数组。 (4认同)
  • 它只是回答了这个问题。 (3认同)
  • @zenith:通常,您将使用`operator&`而不是`data()`从向量中获取指针,但确实,向量提供了与期望数组的函数兼容所需的连续性保证。 (3认同)