我一直试图找到一种方法来删除矢量的第一个元素。
vector<int*> vec;
\\elements get added to the vector throughout the code
if( GetNumIntsInVec() != 0){
this->vec.erase(this->vec.begin());
}
然而,这不起作用。
我是否还需要删除()?我的代码是否会使整个向量消失,(我是否需要以某种方式保存向量?) 我的测试表明它不是释放内存,也不是删除整个矢量。
谢谢!
答案 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>
可以在前端和末尾有效地擦除。