【发布时间】:2014-08-16 23:42:36
【问题描述】:
我遇到了下面的代码,但在理解代码方面需要一些帮助。假设字符串 s 两边都有空格。
string trim(string const& s){
auto front = find_if_not(begin(s), end(s), isspace);
auto back = find_if_not(rbegin(s), rend(s), isspace);
return string { front, back.base() };
}
作者说 back 指向最后一个空格的末尾,而 front 指向第一个非空白字符。所以 back.base() 被调用了,但我不明白为什么。
return 语句后面的字符串后面的花括号代表什么?
【问题讨论】:
-
没有对整个事情进行概要分析,这实际上看起来像是一段整洁的代码。
-
此代码将在仅包含一个或多个空白字符的输入上崩溃,因为迭代器会交叉。
-
@j_random_hacker 我同意。它需要一个安全阀来确保
back.base()大于front,否则只返回空字符串。原则上我还是喜欢这个主意。我认为它实际上会抛出一个长度异常,因为last-first的结果将为负数。