这两种删除向量指针的方法是否会导致相同的结果?

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。