对于string,erase是一个很重要的一个用法,现在总结一下,以便日后查阅:
1.首先是删除该位置的字符:
s.erase(string::iterator it);
删除it的下一个元素;
例如删除最后的一位的字符:
int main()
{
string s;
s="abcdefg";
s.erase(s.end()-1);//运行结果:abcdef
cout<<s<<endl;
}
现在注意s.end的返回值是最后一位,而这里要-1,那就说明了是从该位置的下一个元素开始删除的,也就是说本位置不删除(不-1的我试过了....运行错误).
删除指定位置的元素是删除该迭代器所指定的位置的元素,正确用法是:
int main()
{
string s;
string::iterator it;
s="abcdefg";
it=s.begin()+3;//第三个元素
s.erase(it);//删除第三个元素的下一位,也就是说删除第四位‘d’
cout<<s<<endl;//输出结果:abcefg
}
2.删除一段的内容:
s.erase(s.first,s.last),删除first-last之间的所有元素,现在再看看返回值得问题:
int main()
{
string s;
string::iterator it;
s="abcdefg";
it=s.begin()+3;
s.erase(s.begin()+1,s.end()-1);//结果:ag
cout<<s<<endl;
s="abcdefg";
s.erase(s.begin(),s.end());//结果:空
cout<<s<<endl;
s="abcdefg";
s.erase(s.begin()+1,s.end());//结果:a
cout<<s<<endl;
s="abcdefg";
s.erase(s.begin(),s.end()-1);//结果:g
cout<<s<<endl;
}
从这几个样例看出删除的包括首地址和尾地址是一个【】集合 3.删除某位置 后一段长度的元素:
s.erase(s.first,int(n))
网上看,但是我没试,不知道为什么,函数不支持,估计是格式的问题,以后再看,这个先写上