不减狂娇 2016-09-25 02:58 采纳率: 100%
浏览 1261
已采纳

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了

  • 写回答

1条回答 默认 最新

  • jimmy_carter_714 2016-09-25 04:56
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器