如何在C ++中动态地为数组分配大小?

时间:2012-07-18 07:04:10

标签: c++ arrays dynamic size cardinality

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

我确实在这里看到可能有一种方法可以使用std :: vector来调整数组大小,这会有效吗?而且......代码看起来怎么样?并且矢量的工作方式就像C ++中的数组一样,用于我想用它做的其他事情吗?

4 个答案:

答案 0 :(得分:3)

您的选择是这些:

  1. 使用std :: vector或
  2. 使用普通旧数组
  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析构函数正确释放了类分配的任何内存。矢量将自动处理调整大小。