删除和删除矢量中的所有对象
Removing and deleting all objects in a vector
假设我有一个ivar vector<type> myVector;
。
我将项目添加到这个向量中。
稍后,我想将向量"重置"为零,并将项目添加到中。
有人能证实以下是真的吗:
myVector.clear(); //removes objects but does not remove memory occupied by prior full size of the vector, even though the vector is now empty with a size of 0
请注意,这两个站点完全相互矛盾:这个站点表示过去的结束迭代器没有用clear
无效,而这个站点表示所有与该容器相关的迭代器、指针和引用都无效
void someFunction(){
vector<type> emptyVector;
myVector.swap(emptyVector);
} // function terminates, thus the prior contents of myVector are deleted when emptyVector goes out of scope
这似乎是最好的方法,我认为它实现了与相同的效果
myVector.swap(vector<type>());
现在,这比简单地这样做好还是坏:
myVector=vector<type>();
这将简单地将整个shebang设置为一个新的空向量,因此内存中的旧点将自动清除,对吧?
myVector=vector<type>();
std::vector
的大多数实现都是作为复制和交换来完成上述操作的,这意味着它在内部完成了这一操作,
vector<type>().swap(*this); //inside the operator=
相当于:
vector<type>().swap(myVector);
所以swap()
是优选的,因为它做了清空向量所需的必要事情。没有额外的工作。它是惯用的,您经常会在最好的C++代码中看到这一点。
另一方面,operator=
除了调用swap()
之外,还做其他一些小事。因此,直接调用swap()
可以节省一些CPU周期。
正如您自己所知,如果您想使容量为零(即释放内存(,clear()
是不够的。
注意以下内容不会编译:
myVector.swap(vector<type>()); //compilation error
这是因为std::vector::swap
通过非常数引用接受参数,这意味着临时对象无法绑定到它
希望能有所帮助。
C++11引入了vector::shrink_to_fit((,它试图将向量物理收缩到其大小。但不能保证这样做。请参阅此处了解更多信息。
因此,在物理上调整大小。你可以:
myvector.clear();
myvector.shrink_to_fit();
- 迭代时从向量和内存中删除对象
- C++从对象自己的类中删除对象
- 如何通过对象的类属性删除对象,并返回其对象值?
- 删除对象(具有不同类型)的引用时会发生什么情况?
- 从列表C++中删除对象
- c++ 循环访问对象列表并删除对象
- 从对象本身的容器中删除对象
- 从尝试引用已删除函数的矢量 C++ 中删除对象
- 如何通过指向元组的共享指针删除对象
- 防止通过接口删除对象
- 在 c++ 中从内存中删除对象
- 当对象被删除时,复制被删除对象的对象如何
- 当我使用dynamic_cast并删除对象删除时,析构函数是如何工作的?
- 从内存中删除对象
- 通过C++中的删除方法自行删除对象
- C++ - 析构函数只是释放内存还是实际删除对象
- 如何通过存储在 std::list 中的指针删除对象?
- 如何通过对象参数从指针矢量中删除对象和指针
- 我可以删除对象的右值版本的函数吗?
- 使用对象的索引从矢量中删除对象