删除向量的第一个元素并释放C++中的内存

Deleting the first element of a vector and freeing the memory in C++

本文关键字:C++ 释放 内存 元素 向量 第一个 删除      更新时间:2023-10-16

我一直在试图找到一种删除向量的第一个元素的方法。

vector<int*>    vec;
\elements get added to the vector throughout the code
if( GetNumIntsInVec() != 0){
    this->vec.erase(this->vec.begin());
}

但是,这是行不通的。

我也需要删除()吗?我的代码会使整个向量消失吗,(我需要以某种方式保存向量吗?我的测试表明,它要么不释放内存,要么删除整个向量。

谢谢!

std::vector<T> 类会照顾自己的内容并销毁包含的对象。销毁指针意味着"什么都不做"。如果你想反对一个元素指向的自动删除,你需要使用一些照顾delete的东西,例如,一个std::unique_ptr<T>

std::vector<std::unique_ptr<int>> vec;
vec.emplace_back(new int(17));
vec.erase(vec.begin());

。或者,您需要明确查看delete元素。

顺便说一句:擦除std::vector<T>前面的物体效率相当低下!如果您实际上尝试实现队列之类的东西,则最好使用std::queue<T>或者,如果您需要随机访问元素std::deque<T>。虽然std::vector<T>需要在向前擦除位置后随机排列所有元素,但std::deque<T>可以在前端和末端有效地擦除。