我想知道在这种情况下我是否可以使用std :: vector :: resize()函数而不是erase()。在下面的例子中我想知道:: erase()和:: resize()是否会做同样的事情:
struct Foo
{
int* a = new int[10];
~Foo() { delete[] a; }
};
int main()
{
std::vector<Foo*> fooVector;
// FILL VECTOR WITH 100 FOO OBJECT POINTERS
int i = 100;
while (--i) fooVector.push_back(new Foo);
// DELETE LAST 50 FOO OBJECTS
for (int i = 50; i < 100; ++i)
delete fooVector[i];
// ERASE LAST 50 VECTOR ELEMENTS (POINTERS)
fooVector.erase(fooVector.begin() + 50, fooVector.end());
// IS THE LAST LINE THE SAME AS
fooVector.resize(50);
}
我在想,看到好像向量的最后50个元素是悬空指针,will :: erase()和:: resize()本质上是做同样的事情吗?我猜测:: resize()会在:: resize()之前的最后一个元素的位置之后为所有旧元素执行:: erase()。
答案 0 :(得分:3)
是的,删除vector
的最后一个元素相当于调整它的大小。
在这两种情况下,最后50个元素都被移除,而矢量现在的大小为50。