首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

前辈们看看小弟我的这个函数调用erase和insert如何出错了

2012-03-09 
前辈们看看我的这个函数调用erase和insert怎么出错了这是我用stl做的一个英译汉的词典,其他的几个功能都没

前辈们看看我的这个函数调用erase和insert怎么出错了
这是我用stl做的一个英译汉的词典,其他的几个功能都没有问题,就是这个对词条进行修改的函数modifycitiao()有问题,我把这个类和出现问题的函数都写出来了,希望前辈们看看,错误在哪里


class   Dectionary
{
public:
Dectionary()
{

}
~Dectionary()
  {
 
  }
 
void   inputcitiao();//此函数用来添加词条及其解释
void   outputcitiao();//此函数用来输出所有词条及其解释
void   lookforcitiao();//此函数用来查找词条的解释
void   modifycitiao();//此函数用来修改词条的解释
void   deletecitiao();//此函数用来删除词条
void   showmenu();//此函数用来显示菜单和提供选择


private:
      map <string,   vector <string> *>   citiao;
};
 


inline   void   Dectionary::modifycitiao   ()
{
cout < < "\n请输入要修改的词条 " < <endl;
string   s1,s2;
cin> > s1;
if(!citiao.count   (s1))
cout < < "\n找不到要修改的词条 " < <endl;
else
{
cout < < "已经找到要修改的词条 " < <s1 < <endl;
vector <string> *p=citiao[s1];
vector <string> ::iterator     siter_begin=citiao[s1]-> begin   ();
vector <string> ::iterator     siter_end=citiao[s1]-> end   ();
vector <string> ::iterator   buff;
cout < < "词条的内容为 " < <endl;

                string::size_type   count=0;
int   a;
for(   ;siter_begin!=siter_end;++siter_begin)
{     cout < < "( " < <++count < < ") " < <*siter_begin < <endl;
}

cout < < "\n请输入要修改的是第几个解释 " < <endl;
cin> > a;
while(a <0   ||   a> (citiao[s1]-> size   ()))
{cout < < "\n没有此条解释,请重新输入 " < <endl;
cin> > a;
}


                buff=p-> erase(siter_begin);    
//这个语句对vector <string> 的删除和修改出现问题


cout < < "\n请输入新的解释 " < <endl;
cin> > s2;


p-> insert   (buff,s2);
//                         这个语句出现问题


cout < < "\n修改后的词条解释为 " < <endl;
count=0;
                for(   ;siter_begin!=siter_end;++siter_begin)
{     cout < < "( " < <++count < < ") " < <*siter_begin < <endl;
}

}
}


[解决办法]
siter_begin在前面的for循环里已经被修改了,你要重新恢复一下
siter_begin = citiao[s1]-> begin();

热点排行