如何声明具有可变数量的元素的数组 [C++]

How to declare an array with a variable number of elements [C++]?

本文关键字:元素 数组 C++ 何声明 声明      更新时间:2023-10-16

如何[动态?]声明一个元素数为"i"的数组?

改用标准库的容器,最常见的是std::vector<> .

其他解决方案包含手动分配和释放内存,可能不值得付出努力。

您可以使用

std::vector<T> .它的工作原理就像

std::vector<int> a;
a.push_back(2);    // add 2 to the array
a.push_back(4);

你可以继续说下去,你不需要担心内存分配问题。

你必须

使用指针。例:

float *ptrarray = new float [10];

基本上,类型 * 指针名称 = 新类型 [i];

并且不要忘记清理您的记忆:

delete [] ptrarray; 

或者它将被保留,直到程序结束。

创建一个动态大小的数组

std::size_t N = 10;
SomeType *a = new SomeType[N];
for (auto i=0; i<N; ++i) {
    std::cout << a[i] << std::endl;
}
delete [] a;

C++数组是指向包含特定类型的连续内存块的指针。 此代码段为 10 个SomeType实例的数组分配空间,构造使用默认构造函数初始化每个对象的数组,迭代数组,打印出每个元素,然后通过调用 delete [] 来释放内存。

要点:

  • 您需要调用 delete [] 来释放数组。 需要数组窗体来确保在每个对象上调用析构函数。
  • 分配后,无法恢复数组的大小。
  • 您可以按索引(或指针(迭代数组

这不是做你想做的事的方法,继续阅读。

使用向量

std::size_t N = 10;
std::vector<SomeType> v(10);
for (auto iter=v.begin(); iter!=v.end(); ++iter) {
    std::cout << *iter << std::endl;
}

此代码段使用std::vector为您管理连续的内存块。 请注意使用迭代器遍历向量而不是使用索引。 向量确实支持直接索引,因此上一示例中使用的 for 循环也可以在此处工作。

for (auto i=0; i<v.size(); ++i) {
    std::cout << v[i] << std::endl;
}

使用迭代器是最佳实践和惯用语,尽管使用 for 循环可能不是,但我跑题了。

要点:

  • 向量的情况下,内存管理是自动的
  • 您可以使用push_back
  • 追加
  • 向量知道其中有多少个元素——调用v.size()来获取元素的数量
  • 使用从v.begin()返回的 iterator s 执行迭代,v.end()

只需使用std::vector. 如果需要对基础指针的原始访问权限,请使用 &v[0]v.data(),但除非需要,否则不要这样做。 此外,不要将std::auto_ptr用于数组。 你会很想这样做,但不要这样做。