下面的函数利用std :: accumulate将字符串转换为整数。
它首先检查标志的存在并跳过它。
lambda的参数c
很好,因为它只遍历了输入字符串s
的所有其余字符。但是第一个lambda参数sum
呢?它怎么知道应该将sum
初始化为零?这些lambda参数的顺序重要吗?
int string2int(const string &s)
{
return (s[0] == '-' ? -1 : 1) *
accumulate(begin(s) + (s[0] == '-' || s[0] == '+'), end(s), 0,
[](int sum, char c) {
return sum * 10 + c - '0';
});
}
顺便说一句,不使用std :: accumulate的等效代码如下所示:
int string2int(const string &s)
{
int sign = (s[0] == '-' ? -1 : 0);
sign = (s[0] == '+' ? 1 : sign);
int index = 0;
if(sign != 0)
{
++index;
}
int result = 0;
for (auto i = index; i < s.size(); ++i)
{
result = result * 10 + (s[i] - '0');
}
sign = (sign < 0 ? -1 : 1);
return result * sign;
}
答案 0 :(得分:1)
end(s)
和lambda之间的参数是初始值。
例如,如果您想要产品,则可以为1。
第一个lambda参数是累积数据,第二个是序列的当前元素。