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失效,后面的程序会崩溃一旦执行++操作会崩溃的