在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];
}
答案 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;
}