迭代器引用受控序列中的元素的要求

  • 本文关键字:元素 引用 迭代器 c++ std
  • 更新时间 :
  • 英文 :


我最近想知道,当使用迭代器调用时,修改序列容器操作(例如inserterase)的行为,迭代器引用的元素不受调用其成员函数的容器控制。

int main() {
  std::vector<int> a = {1,2,3}, b = {1,2,3};
  a.erase(b.begin());
}

我知道这会导致不明确的行为,但标准到底在哪里禁止这种行为?

("受控者"术语是Dinkumware文档中使用的术语,也用于某些valarray操作的标准中,尽管我在通用序列容器中找不到它。)

它不是直接禁止的,只是没有任何定义的行为-因此是UB。

在C++11标准中,该序列容器操作在表100中定义,其中a.erase(q)的前提条件是

q表示a 的有效可解引用常量迭代器

如果不是,则操作无效。

最新更新