string的迭代器解引用不是不改变迭代器本身指向的吗?怎么回事

string的迭代器解引用不是不改变迭代器本身指向的吗?怎么回事

问题描述:

string的迭代器解引用不是不改变迭代器本身指向的吗?怎么回事
贴上源码

 #include <iostream>
#include <string>
using namespace std;
int main(void) {
    int N;
    cin >> N;
    for(int i=1;i<=N;i++){
        string p;
        cin >> p;
        for(string::iterator j=p.begin();j!=p.end();j++){
            if(*j == ']' || *j == ')'){
                if(j == p.begin()) break;
                if(*(j-1) == '(' && *j == ']') break;
                if(*(j-1) == '[' && *j == ')') break;
                for(string::iterator k=j-1;k!=p.begin();){
                    if((*j == ']' && *k == '[') || (*j == ')' && *k == '(')){
                        p.erase(j);
                        p.erase(k);
                        break;
                    }else k--;
                }
            }else continue;
        }
        if(p.empty()) cout << "Yes" << endl;
        else cout << "No:" << p << endl;
    }
}

下面是调试截图
调试截图
为什么我解引用完迭代器指向会变表情
还有,我的字符串第一个字符明明是(怎么变成\0了

第一次p j 值为'\0'是因为那一句初始化还没有执行。还有p.erase(j)会导致迭代器j失效,后面的程序会崩溃一旦执行++操作会崩溃的