【发布时间】:2016-06-09 00:57:19
【问题描述】:
我正在尝试为我的向量类编写 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--;
}
}
【问题讨论】:
-
为什么
delete是Vector中的最后一个元素,而不是arr[pos]循环前Vector<T>::erase()中要删除的元素? -
您是如何意识到不能使用 delete 的?编译错误?运行时错误?主管告诉的?
-
@MikeCAT 第一个问题:因为他只是将它们移动了一个。第二个问题:可能是编译错误,因为
arr[current_size-1]不是指针。 -
您将为此使用 placement new 和 delete。不过,这取决于您如何实现
grow。这也可能是痛苦的问题。正确编写矢量风格的容器并非易事。
标签: c++ arrays templates vector