这两种删除向量指针的方法是否会导致相同的结果?
Do these two ways of deleting vector pointers result in the same thing?
我想知道在这种情况下我是否可以使用 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);
}
我想知道,如果 vector 的最后 50 个元素是悬挂指针,那么 ::erase() 和 ::resize() 本质上会做同样的事情吗?我猜 ::resize() 会在 ::resize() 之前的最后一个元素的位置之后对所有旧元素执行 ::erase()。
是的,删除 vector
的最后一个元素等同于调整它的大小。
在这两种情况下,最后 50 个元素都被删除,向量现在的大小为 50。
我想知道在这种情况下我是否可以使用 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);
}
我想知道,如果 vector 的最后 50 个元素是悬挂指针,那么 ::erase() 和 ::resize() 本质上会做同样的事情吗?我猜 ::resize() 会在 ::resize() 之前的最后一个元素的位置之后对所有旧元素执行 ::erase()。
是的,删除 vector
的最后一个元素等同于调整它的大小。
在这两种情况下,最后 50 个元素都被删除,向量现在的大小为 50。