string::iterator p; // 一个正常的迭代器, 可++, 可解引用
string::const_iterator cp; // 可++, 不可解引用
const string s("abcde"); // s对象为一个const对象, 不可修改
1. p = s.begin();
错误, s对象是一个const修饰的string类对象, 所以s.begin()调用的第二个函数,如图
所以不合法, 权限不能放大
2. *cp = *p;
不合法, cp不可解引用
3. cp = p;
合法, 权限可缩小
4. ++cp;
合法, 可以++
5.p = cp;
不合法, 权限不能放大
6. ++*p;
合法
7.p < cp;
不合法,关系操作符的两个迭代器必须指向同一个容器中的元素或超出容器末端的下一个位置
8. cout << p - cp;
不合法, 原因同上, 具体问题可以查看博客链接如下:
9. *p = *cp;
不合法, cp不能解引用
10. cout << *s.begin();
不合法, 原因同上