如何动态地将大小分配给 C++ 中的数组?

Posted

技术标签:

【中文标题】如何动态地将大小分配给 C++ 中的数组?【英文标题】:How do I dynamically assign the size to an array in C++? 【发布时间】:2012-07-18 07:04:10 【问题描述】:

所以现在我在 C++ 中有一个名为 Set 的类。在其中,我有一个名为 mCardinality 的整数和一个名为 mElements 的整数数组。我希望能够在 mCardinality 的构造函数中接受一个整数,然后使用它来为我的整数数组分配一个大小,有没有办法做到这一点,或者我绝对必须马上为它设置一个大小? (我想我可以将大小设为最大整数,然后只使用基数来限制我处理元素的循环,但更简洁的解决方案会更好)。

我确实在这里看到了可能有一种方法可以使用 std::vector 来调整数组的大小,这可行吗?而且...该代码看起来如何?对于我想用它做的所有其他事情,向量是否像 C++ 中的数组一样工作?

【问题讨论】:

【参考方案1】:

您的选择如下:

    使用 std::vector 或 使用普通的旧数组

带矢量(推荐):

class YourSet 
public:
   YourSet(int size) : elements(size)
   
   
private:
   std::vector<int> elements;
;

使用数组(由于可能存在异常安全问题,不推荐):

class YourSet 
public:
   YourSet(int size)
   
       elements = new int[size];
   
   ~YourSet()
   
        delete[] elements;
   
private:
   int* elements;
   // no implementation to prevent shallow copying
   YourSet( const YourSet&);
   void operator=(const YourSet&);
;

【讨论】:

我宁愿只使用数组。我该怎么做? @Taylor Matyasz:我包括在内,但实际上vector 更好。【参考方案2】:

std::vector 将适用于您的目的。

#include <vector>

class Set

  Set(int len)
   : mElements(len)
  
  

  void do_smth()
  
    size_t vector_len = mElements.size();

    int index = 0;
    int element = mElements[index];
  


  std::vector<int> mElements;
;

【讨论】:

【参考方案3】:

Vector 保存指针,并在需要时重新分配内存。

T* new_ptr = new T[new_size];
std::copy(ptr, ptr + size, new_ptr);
delete[] ptr;
ptr = new_ptr;
size = new_size;

这是一个简单的例子。 Vector使用分配器,但实际上是这样的。

【讨论】:

【参考方案4】:

转到向量。当您向其中添加或删除项目时,它会自动调整大小,如果需要,您也可以指定它的大小。

 vector<myClass> m_vClasses;
 myClass myNewObject;
 m_Classes.push_back(myNewObject); // Vector resized when you add new element

假设您的 myClass 析构函数正确释放了类分配的任何内存,您无需担心内存或其他问题(除非 myClass 是指向动态分配内存的指针)。矢量会自动为您处理大小调整。

【讨论】:

以上是关于如何动态地将大小分配给 C++ 中的数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何将两个数组分配给 Perl 中的哈希?

如何从函数返回动态分配的指针数组?

如何将从 API 获取的数组分配给 Vue.js 中的数据属性?

将文字数组分配给对象变量

如何将 PHP 数组分配给 jQuery 数组? [复制]

Perl:将数组分配给哈希