Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我正在用C+编写一个向量类+;使用数组。_C++_Arrays_Vector - Fatal编程技术网

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

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

在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_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;