对于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))

网上看,但是我没试,不知道为什么,函数不支持,估计是格式的问题,以后再看,这个先写上