繁体   English   中英

我正在使用数组在 C++ 中编写一个向量类。

[英]I am writing a Vector Class in C++ using Arrays.

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

 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];

    }

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

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

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

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

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

您不能减小动态分配数组的大小,它需要重新分配。

T* newArray = new T[m_size];
std::copy(m_array, m_array + m_size, newArray);
delete[] m_array;
m_array = newArray;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM