C++ 我正在用C+编写一个向量类+;使用数组。
在pop_back函数中,我想返回最后一个元素并删除它。如果我尝试删除(m_数组[m_size-1]),我得到的是C2541:delete无法删除不是指针的对象。 从数组中删除最后一个元素的正确方法是什么C++ 我正在用C+编写一个向量类+;使用数组。,c++,arrays,vector,C++,Arrays,Vector,在pop_back函数中,我想返回最后一个元素并删除它。如果我尝试删除(m_数组[m_size-1]),我得到的是C2541:delete无法删除不是指针的对象。 从数组中删除最后一个元素的正确方法是什么 template <typename T> class mvector { private: T *m_array; int m_size; int m_reserved_size; public: T pop
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];
}
模板
类mvector
{
私人:
T*m_阵列;
国际货币单位大小;
int m_保留大小;
公众:
T pop_back();//将长度减少1,返回从向量中删除的值
};
//功能定义:
样板
T mvector::pop_back()
{
删除(m_数组[m_大小-1]);
m_尺寸--;
返回m_数组[m_大小-1];
}
目前无法部分返回分配的内存块;要么全力以赴,要么一事无成。未来的C++标准(C++ 17)可能会改变这个。p>
您必须分配一个正确大小的新块,复制所有要保留的内容,并删除整个旧块 您的代码不正确,您试图删除最后一项,然后缩小大小并返回新的最后一项。这将返回数组中倒数第二个项 正确的方法是复制最后一个项目,减小大小,然后返回该项目的副本
template<typename T>
T pop_back()
{
T ret = m_array[m_size - 1];
m_size--;
return ret;
}
难道你就不能
m\u size--
这会让它看起来像是被删除了一样吗。你真的不需要删除它,是吗?是的,我想我只需要这样做,然后在push_back()上覆盖内容。这就解决了问题。谢谢注意:此弹出式返回
并非异常安全;如果在返回过程中创建的T
的副本抛出,则元素将无法恢复地丢失。因此,容器往往具有void pop_back()
,调用方将通过back()
访问最后一个元素,然后在检索到值后调用pop_back
。
T* newArray = new T[m_size];
std::copy(m_array, m_array + m_size, newArray);
delete[] m_array;
m_array = newArray;