如何动态地将大小分配给 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++ 中的数组?的主要内容,如果未能解决你的问题,请参考以下文章