2015-05-17 73 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一樣好(如果不是更好)。