删除 c++ std::vector 中的所有项目

2024-03-25

我正在尝试删除其中的所有内容std::vector使用以下代码

vector.erase( vector.begin(), vector.end() );

但它不起作用。


更新:clear不会破坏向量保存的元素吗?我不想这样,因为我仍在使用这些对象,我只想清空容器


我认为你应该使用std::vector::clear http://en.cppreference.com/w/cpp/container/vector:

vec.clear();

EDIT:

不清除破坏元素 由向量持有?

是的,它确实。它在返回内存之前调用向量中每个元素的析构函数。这取决于您在向量中存储的“元素”。在下面的示例中,我将对象本身存储在向量中:

class myclass
{
public:
    ~myclass()
    {

    }
...
};

std::vector<myclass> myvector;
...
myvector.clear(); // calling clear will do the following:
// 1) invoke the deconstrutor for every myclass
// 2) size == 0 (the vector contained the actual objects).

例如,如果您想在不同容器之间共享对象,您可以存储指向它们的指针。在这种情况下,当clear被调用时,仅释放指针内存,未触及实际对象:

std::vector<myclass*> myvector;
...
myvector.clear(); // calling clear will do:
// 1) ---------------
// 2) size == 0 (the vector contained "pointers" not the actual objects).

对于评论中的问题,我认为getVector()定义如下:

std::vector<myclass> getVector();

也许你想返回一个引用:

// vector.getVector().clear() clears m_vector in this case
std::vector<myclass>& getVector(); 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除 c++ std::vector 中的所有项目 的相关文章

随机推荐