我试图为我的vector类编写pop_back和erase成员函数。但是我意识到我不能使用删除。关于如何摆脱元素的任何建议?
template <class T>
class Vector{
private:
int current_size, capacity;
T* arr;
public:
Vector();
unsigned int size();
void grow();
void push_back(const T& elt);
void pop_back();
T& at(int pos);
T& front();
T& back();
bool empty();
void insert (const T&elt, int pos);
void erase(int pos);
Vector<T>& operator=(const Vector& v);
T& operator[](int n);
};
template <class T>
void Vector<T>::pop_back(){
if(!empty()){
delete arr[current_size-1];
current_size--;
}
}
template <class T>
void Vector<T>::erase(int pos){
if(!empty() && pos>=0 && pos<current_size) {
for (int i=pos; i<(current_size-1); i++){
arr[i]=arr[i+1];
}
delete arr[current_size-1];
current_size--;
}
}
答案 0 :(得分:0)
要在未使用常规new
分配的内容上调用析构函数,您可以执行以下操作:
arr[current_size-1].~T();
请记住,在分配数组中的对象时,您可能还希望确保在其上调用展示位置new
,否则您将处理未初始化的对象。例如:
new (&arr[some_index]) T();
(您需要包含头文件<new>
才能执行此操作)