代码之家  ›  专栏  ›  技术社区  ›  Alberto

预期的容器行为

  •  -2
  • Alberto  · 技术社区  · 5 年前

    我在C++中构建了一个容器,在迭代器中,并且我想“模仿”STD容器行为,但是我不能确定迭代器发生什么,如果在创建和删除之间,引用变化的容器。

    例子: 我有一个喜欢的列表,所以在迭代器中,我必须存储指向它引用的链表的第一个元素的指针,但是假设我们有一段代码

    Iterator iter { linkedList.begin() };
    linkedList.deleteFirstElement();
    

    现在,迭代器中的指针指向一个不再存在的对象,因此如果我去引用它,它将导致分割错误。

    我的问题是:我是否需要在链表的迭代器中创建一个副本,它引用或只是证明这是未定义的行为?

    1 回复  |  直到 5 年前
        1
  •  1
  •   kmdreko    5 年前

    C++标准库对每个容器有许多迭代器失效规则, std::list 例如 pop_front 其中指出:“对已删除元素的引用和迭代器无效”。