C++ 迭代器引用受控序列中的元素的要求
最近,我想知道当使用迭代器调用时,修改序列容器操作(例如,C++ 迭代器引用受控序列中的元素的要求,c++,std,C++,Std,最近,我想知道当使用迭代器调用时,修改序列容器操作(例如,insert,erase)的行为,迭代器引用的元素不受调用其成员函数的容器的控制 int main() { std::vector<int> a = {1,2,3}, b = {1,2,3}; a.erase(b.begin()); } intmain(){ 向量a={1,2,3},b={1,2,3}; a、 擦除(b.begin()); } 我知道这会导致未定义的行为,但标准究竟禁止了哪些行为 (Dinkumwa
insert
,erase
)的行为,迭代器引用的元素不受调用其成员函数的容器的控制
int main() {
std::vector<int> a = {1,2,3}, b = {1,2,3};
a.erase(b.begin());
}
intmain(){
向量a={1,2,3},b={1,2,3};
a、 擦除(b.begin());
}
我知道这会导致未定义的行为,但标准究竟禁止了哪些行为
(Dinkumware文档中使用了“受控”术语,一些valarray
操作的标准中也使用了“受控”术语,尽管我在常规序列容器中找不到它。)它不是直接禁止的,只是没有任何定义的行为-因此
在C++11标准中,此序列容器操作在表100中定义,其中a.erase(q)
的先决条件为
q
表示对a
如果不是,则该操作无效。它不是直接禁止的,只是没有任何定义的行为-因此
在C++11标准中,此序列容器操作在表100中定义,其中a.erase(q)
的先决条件为
q
表示对a
如果不是,则操作无效。我查看了N3337中的同一个表,但找不到报价。它隐藏在23.2.3/3中。我查看了N3337中的同一个表,但找不到引用。它在23.2.3/3中隐藏得很好。