代码
std::string str = "Hello World 11111";
str.erase(remove_if(str.begin(), str.end(), [](char c) -> bool {
return c == '1';
}), str.end());
解析
首先,str.begin()和str.end()两个函数返回的都是迭代器对象,它们分别指向字符串开头和字符串结束位置
第三个参数,[ ]( ) -> { },是一个用lambda进行简写的回调函数,这个函数接受一个char,然后判断它是否等于’1’
remove_if是一个迭代函数,它遍历begin-end之间的所有字符,将符合回调函数条件的字符,全部移动到字符串尾部
remove_if返回的也是一个迭代器对象,它指向首个被移动的元素的位置
erase也是一个迭代函数,它接受两个参数,begin_iterator,end_iterator,移除两个位置之间的所有字符
erase返回的也是一个迭代器,指向最后一个被移除元素后面的位置,即原来end_iterator指向的位置
再以上代码中,erase的首个参数,是首个被移动的元素的位置,第二个参数是移动后,新的string结束位置
实际也就相当于移除所有被移动的字符,从而就达到了移除所有符合回调函数的字符