是否允许增加已经在it
的迭代器变量end()
,即auto it = v.end()
?
vector
?++it
可能幂等,如果it==v.end()
?我问,因为我偶然发现了这样的代码:
std::vector<int> v{ 1, 2, 3, 4, 5, 6, 7 };
// delete every other element
for(auto it=v.begin(); it<v.end(); ++it) { // it<end ok? ++it ok on end?
it = v.erase(it);
}
它适用于g ++ - 6,但这不是证明。
对于一个it<v.end()
,可能仅适用于vectors
,我认为一般应该阅读it!=v.end()
。但是,在此示例中,如果v
已应用于++it
,则无法识别"post-update-cmd": "App\\Console\\Installer::postUpdate",
的结尾。
答案 0 :(得分:11)
行为未定义。您可以将迭代器设置为end()
,但不能将其递增或取消引用它。
只要背衬容器不是空的,就可以减少它。