首页 > 解决方案 > 删除向量中的指针

问题描述

这是删除向量中指针的正确方法吗?可以使用索引而不是迭代器吗?

    std::vector<int*> stuff;
    int *a = new int(10);
    int *b = new int(20); 
    int *c = new int(30);

    stuff.push_back(a);
    stuff.push_back(b);
    stuff.push_back(c);

    for (int i = 0; i < stuff.size(); i++ ){
        delete (stuff[i]); // doesn't erase
    }
    stuff.clear();
    

标签: c++pointersstdvector

解决方案


这是删除向量中指针的正确方法吗?

您的代码按预期执行(并且内存已正确删除)。

可以使用索引而不是迭代器吗?

是的。

也就是说,使用迭代器访问向量元素被添加到语言中以避免索引错误(这是一些最常见的错误来源)。

由于您正在使用指针向量(并且我假设您通过索引访问元素以避免将迭代器取消引用到指针的情况),因此请考虑使用迭代std::for_each


推荐阅读