自定义向量的清除功能

Custom vector's clear function

本文关键字:功能 清除 向量 自定义      更新时间:2023-10-16
template <class DataType> /// Declaring the template class Datatype
class Vector
{   public:
    Vector()
    {m_data = new DataType[9999]; 
      m_size = 1;
        m_current = 0;
    }
    Vector(int size)  /// Constructing vector
    { m_data = new DataType[size]; 
      m_size = size;
      m_current = -1;
    }
    ///////////////////////////////////////
    /// Creating Push and Pop methods
    ///////////////////////////////////////
    bool push(const DataType data) 
    { if (m_current < m_size)
      { m_current++;
        m_data[m_current] = data;
        return true;
      }
      else
      { return false; }
    }
    bool pop(DataType &data)
    { if (m_current==-1)
      { cout << "Nothing to pop";
        return false;
      }
      else
      { data = m_data[m_current];
        m_current--;
        return true;
      }
    }
    ///////////////////////////////////////
    /// Methods to access the private m_data
    ///////////////////////////////////////
    float retrievefloat(int pointer) 
    {
        return m_data[pointer];
    }
    string retrievestring(int pointer)
    {
        return m_data[pointer];
    }
    int retrieveint(int pointer)
    {
        return m_data[pointer];
    }
    int retrievecurrent()
    {
        return m_current;
    }
    int retrievesize()
    {
        return m_size;
    }
private:
    DataType* m_data;
    int m_size;
    int m_current;
};

好的,这里我们有一个自定义的模板化向量类。这里的问题是,我希望包含一个clear()函数。我知道你几乎可以做int m_size = 0int m_current = -1.但是你如何重置m_data呢?

当我想在调用clear函数后再次推送数据时,尝试delete [] m_data会使程序崩溃。

我应该从哪里开始...现在,这不是一个向量类,而是一个堆栈类。

代码存在很多问题,但为了解决初始问题,不应删除clear()方法中的m_data。通常,类的用户不会读取已推送范围之外的对象,因此无需删除或重新分配。此外,由于所有且仅构造函数设置并向量的大小并分配它,因此您希望它不会更改,并假设始终分配m_data缓冲区。清除后,将没有地方推送您的数据!

根据您的

标准,以下是它可能是什么:

void clear()
{
    m_current = -1;
}

看看这个经过修订但远未完成的片段。祝您完成它很开心...

template<typename DataType> /// Declaring the template class Datatype
class Vector
{
public:
    Vector(size_t size = 9999)  /// Constructing vector
    {
        if (size == 0)
        {
            size = 9999;
        }
        m_data = new DataType[size]; 
        m_size = size;
        m_current = -1;
    }
    void clear()
    {
        m_current = -1;
    }
    ///////////////////////////////////////
    /// Creating Push and Pop methods
    ///////////////////////////////////////
    bool push(const DataType data) 
    { if (m_current < m_size)
      { m_current++;
        m_data[m_current] = data;
        return true;
      }
      else
      { return false; }
    }
    bool pop(DataType &data)
    { if (m_current==-1)
      { cout << "Nothing to pop";
        return false;
      }
      else
      { data = m_data[m_current];
        m_current--;
        return true;
      }
    }
    ///////////////////////////////////////
    /// Methods to access the private m_data
    ///////////////////////////////////////
    bool retrieveat(size_t index, DataType &data)
    {
      if (index>=m_size)
      {
        return false;
      }
      data = m_data[index];
      return true;
    }
    int retrievecurrent()
    {
        return m_current;
    }
    size_t retrievesize()
    {
        return m_size;
    }
private:
    DataType* m_data;
    size_t m_size;
    int m_current;
};