我正在使用数组在C ++中编写Vector类。

时间:2016-03-06 22:11:54

标签: c++ arrays vector

在pop_back函数中,我想返回最后一个元素并将其删除。如果我尝试删除(m_array [m_size - 1])我得到C2541:删除不能删除不是指针的对象。 从数组中删除最后一个元素的正确方法是什么?

 template <typename T>
 class mvector
 {

 private:

     T *m_array;
     int m_size;
     int m_reserved_size;


     public:

       T pop_back();   // decrease length by 1, returning the value removed from the vector

  };

   //Function Definition :

    template <typename T>
    T mvector<T>::pop_back()
    {
        delete(m_array[m_size - 1]);
        m_size--;
        return m_array[m_size - 1];

    }

2 个答案:

答案 0 :(得分:0)

目前无法部分返回已分配内存块;这是全有或全无。未来的C ++标准(C ++ 17)可能会改变这一点。

您必须分配一个正确大小的新块,复制您想要保留的所有内容,并删除整个旧块。

答案 1 :(得分:0)

您的代码不正确,您尝试删除最后一项,然后缩小尺寸并返回新的最后一项。这将返回数组中倒数第二个项目。

正确的方法是制作最后一项的副本,缩小尺寸,然后返回该项目的副本。

theDay - INTERVAL '28 DAYS'

您无法减小动态分配的数组的大小,需要重新分配。

template<typename T>
T pop_back()
{
  T ret = m_array[m_size - 1];
  m_size--;
  return ret;
}