为什么第一段程序用迭代器会有错误?而第二段是对的呢

1.图片说明
2.图片说明

的确是那句话的问题,由于C++标准中只有有限的几个操作符保证从左到右的执行顺序,其他的都无法保证,就比如*beg == *++beg,其实可以拆成temp = ++beg和*beg == *temp两个步骤,至于哪个操作在前,标准没有无法保证,一旦前者先执行,当beg为str.end()前一个元素的迭代器时,经过自增,就成了off-the-end迭代器,对其解引用为未定义行为,可能引起程序崩溃