[英]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.