c++ - 删除 vector 或指针编译器错误

标签 c++ pointers vector compiler-errors

我有以下功能, 曾经正常工作,但是,我不知道我做了什么,我开始出现一些奇怪的错误

容器是指针的 vector

template<typename Container>
void delete_collections(Container& c) 
{ 
    while(!c.empty()) 
    {
        delete c.back(); //<=== here
        c.back() = NULL;
        c.pop_back();    //<=== & here
    }
}

第一个错误

**这条线有多个标记

  • (每个未声明的标识符都是
  • `back' 未声明(先用这个

第二个错误

  • `pop_back' 未声明(首次使用

解决方案 我有一次错误地将映射传递给函数,但我希望编译器给出任何警告。

最佳答案

仅作记录,我会改用专门的容器,看看例如促进。或者,将智能指针存储在您不必手动调用 delete 的位置。尽管如此,以下是如何以适用于除 map 之外的每个容器的方式进行操作:

template<typename container>
void delete_all(container& c) {
    for(typename container::const_iterator it=c.begin(), end=c.end(); it!=end; ++it)
        delete *it;
    c.clear();
}

对于 C++11,您也可以使用 auto,而不是 typename container::const_iterator

关于c++ - 删除 vector 或指针编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17753669/

相关文章:

swift - 我如何使用与 c(library) 交互的指针

c - 指针在 void 函数中交换值,但不会返回交换后的值

c++ - std::vector 使用 push_back 时的语义问题

c++ - 在 C++ 中通过引用传递值

c++ - 按时使用重载运算符

c++ - 如何将 Base* 指针视为 Derived<T>* 指针?

Objective-C:带有协议(protocol)的实例指针

c++ - vector<vector<largeObject>> 与 c++ 中的 vector<vector<largeObject>*>

c++ - shrink_to_fit() 与交换技巧

c++ - 媒体基金会 AMR 解码