2015-05-17 34 views
1

是否有可能将此变成简单而好用的std::transformC++变换和lambda

int j = 0; 
for (auto &vi : V) 
{ 
    auto div_res = div(vi + j, 10); 
    j = div_res.quot; 
    vi = div_res.rem; 
} 

此代码很简单的事情,它感觉就是要短得多,更清晰。或者,如果不进行转换,是否有任何std函数可以使这类事情变得更简单?

+0

你为什么不试试(http://www.cplusplus.com/reference/algorithm/transform/)? – Christophe

+2

你的代码简单而优雅! – Steephen

+0

您的算法看起来像是'accumulate'和'transform'的组合。我不认为标准库中有一个通用算法可用于以优雅的方式重现/简化您的算法。 – dyp

回答

4

关于什么:

std::transform(vi.begin(), vi.end(), vi.begin(), 
    [&j](auto elem) /* or const auto& elem */ 
    { 
     auto div_res = div(elem + j, 10); 
     j = div_res.quot; 
     return div_res.rem; 
    } 
); 

然而,在这种情况下,基于范围for可能比std::transform一样好(如果不是更好)。