2

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

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

4

4 回答 4

3

你的选择是这些:

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

带矢量(推荐):

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&);
};
于 2012-07-18T07:07:21.703 回答
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;
};
于 2012-07-18T07:07:47.193 回答
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使用分配器,但实际上是这样的。

于 2012-07-18T07:08:02.080 回答
1

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

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

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

于 2012-07-18T07:09:05.857 回答