假设我有一个 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
而这个站点则表明与该容器相关的所有迭代器、指针和引用都已失效。无论哪种方式,由于capacity
没有改变,那么这并没有真正“重置” vector
.
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 设置为一个新的空向量,因此内存中的旧点将自动被擦除干净,对吗?