现在我在C ++中有一个名为Set的类。在其中,我有一个名为mCardinality的整数,以及一个名为mElements的整数数组。我希望能够在mCardinality的构造函数中接受一个整数,然后使用它来为我的整数数组分配一个大小,有没有办法做到这一点,或者我必须要有一个大小的蝙蝠? (我想我可以把大小设为最大整数,然后只使用基数来限制我处理元素的循环,但更好的解决方案更合适。)
我确实在这里看到可能有一种方法可以使用std :: vector来调整数组大小,这会有效吗?而且......代码看起来怎么样?并且矢量的工作方式就像C ++中的数组一样,用于我想用它做的其他事情吗?
答案 0 :(得分:3)
您的选择是这些:
使用矢量(推荐):
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&);
};
答案 1 :(得分:1)
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;
};
答案 2 :(得分:1)
Vector保存指针,当需要重新分配内存时。
T* new_ptr = new T[new_size];
std::copy(ptr, ptr + size, new_ptr);
delete[] ptr;
ptr = new_ptr;
size = new_size;
这是一个简单的例子。 Vector使用allocator,但实际上是这样的。
答案 3 :(得分:1)
去寻找一个向量。当您添加或删除项目时,它会自动调整大小,您也可以根据需要指定它的大小。
vector<myClass> m_vClasses;
myClass myNewObject;
m_Classes.push_back(myNewObject); // Vector resized when you add new element
您不必担心内存或其他问题(除非myClass是指向动态分配的内存的指针),假设您的myClass
析构函数正确释放了类分配的任何内存。矢量将自动处理调整大小。