读书人

前辈们看看小弟我的这个函数调用erase

发布时间: 2012-03-09 21:42:53 作者: rapoo

前辈们看看我的这个函数调用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();

读书人网 >C++

热点推荐