SMILET
最好的办法是使用算法remove_if和isspace:remove_if(str.begin(), str.end(), isspace);现在算法本身不能更改容器(只修改值),所以它实际上会乱转值并返回指向现在应该在哪里的指针。所以我们必须调用string :: erase来实际修改容器的长度:str.erase(remove_if(str.begin(), str.end(), isspace), str.end());我们还应该注意,remove_if最多只能创建一个数据副本。这是一个示例实现:template<typename T, typename P>T remove_if(T beg, T end, P pred){
T dest = beg;
for (T itr = beg;itr != end; ++itr)
if (!pred(*itr))
*(dest++) = *itr;
return dest;}