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

时间:2012-02-22 09:43:03

标签: c++ std

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

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

我知道这会导致未定义的行为,但标准是否禁止这种情况?

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

1 个答案:

答案 0 :(得分:4)

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

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

  

q表示a

的有效可解除引用的const迭代器

如果不是,则操作无效。