【发布时间】:2019-12-25 02:08:33
【问题描述】:
我正在尝试按以下索引从向量中删除一个元素,但为什么第一个输出与第二个输出不同?有什么方法可以避免这种情况,或者有更好的删除元素的方法吗?
int main() {
vector<int> test = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
cout << *test.end() << endl;
test.erase(test.begin() + 2);
cout << *test.end() << endl;
return 0;
}
【问题讨论】:
-
end() 是最后一个元素之后的元素,解引用没有意义
-
*test.end()是未定义的行为。 -
我只是想证明 end 实际上发生了变化,因为有时我可能想比较它们
-
你不能通过取消引用一个不可引用的迭代器来“证明”任何事情。
-
“有时我可能想比较它们” 这也没有意义;如果您要在
erase之前缓存test.end()的结果并在erase之后使用它,那么您将再次出现未定义的行为(即使使用==),因为迭代器将失效。你的真正问题是什么?