[英]pop_back and erase for a vector class C++
我正在嘗試為我的向量類編寫pop_back和擦除成員函數。 但是我意識到我不能使用刪除。 關於如何擺脫元素的任何建議?
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--;
}
}
要在未分配有常規new
上調用析構函數,您將執行以下操作:
arr[current_size-1].~T();
請記住,在數組中分配對象時,您可能還需要確保對它們也調用new
放置,否則您將要處理未初始化的對象。 例如:
new (&arr[some_index]) T();
(您需要包括頭文件<new>
來執行此操作)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.