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

时间:2014-01-15 01:55:54

标签: c++ vector

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

vector<int*>    vec;
\\elements get added to the vector throughout the code

if( GetNumIntsInVec() != 0){
    this->vec.erase(this->vec.begin());
}

然而,这不起作用。

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

谢谢!

1 个答案:

答案 0 :(得分:2)

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>可以在前端和末尾有效地擦除。