c++ - vector 类 C++ 的 pop_back 和删除

标签 c++ arrays templates vector

我正在尝试为我的 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--;
 }
}

最佳答案

在未分配的对象上调用析构函数 new你会做这样的事情:

arr[current_size-1].~T();

请记住,在分配数组中的对象时,您可能还希望确保调用 placement new对它们也是如此,否则你正在处理未初始化的对象。例如:

new (&arr[some_index]) T();

(您需要包含头文件 <new> 才能执行此操作)

关于c++ - vector 类 C++ 的 pop_back 和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35641065/

相关文章:

c++ - 动态检查使用可变参数继承的类的类型的最佳方法是什么?

c++ - 从引用创建一个指向基类的智能指针

javascript - 根据数组的键对数组进行分组,并使用组作为索引创建一个新数组

java - 为什么这是数组越界异常?

c++ - 如何使用模板类型的 vector ?

c++ - 为什么T&&实例化为int&?

c++ - wchar_t数据类型如何在c中工作?

c++ - 静态指针初始化复位 'after' 初始化

c++ - Visual Studio - 从 c++ 项目生成 UML

c - 如何在 C 中分配和声明结构数组的 3D?