我最近想知道在使用迭代器调用时修改序列容器操作的行为(例如insert
,erase
),迭代器引用的元素不受调用其成员函数的容器控制。
int main() {
std::vector<int> a = {1,2,3}, b = {1,2,3};
a.erase(b.begin());
}
我知道这会导致未定义的行为,但标准是否禁止这种情况?
(“受控制”术语是Dinkumware文档中使用的术语,也用于某些valarray
操作的标准,尽管我无法使用通用序列容器找到它。)
答案 0 :(得分:4)
它不是直接禁止,它没有任何已定义的行为 - 因此UB。
在C ++ 11标准中,此序列容器操作在表100中定义,其中a.erase(q)
的前提条件是
的有效可解除引用的const迭代器
q
表示a
如果不是,则操作无效。