这两种删除矢量指针的方法是否会产生相同的结果?

时间:2018-02-12 05:06:16

标签: c++ vector std erase

我想知道在这种情况下我是否可以使用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()。

1 个答案:

答案 0 :(得分:3)

是的,删除vector的最后一个元素相当于调整它的大小。

在这两种情况下,最后50个元素都被移除,而矢量现在的大小为50。