Я знаю, что это не STL, как вы хотите, но это то, что вы можете адаптировать по мере возникновения различных потребностей.
Ниже приведен шаблон, который вы можете использовать для расчета; 'func' - это функция, которую вы хотите выполнить: умножение, сложение и т. д .; 'parm' является вторым параметром в 'func'. Вы можете легко расширить это, чтобы использовать различные функции с большим количеством различных типов.
template<typename _ITStart, typename _ITEnd, typename _Func , typename _Value >
_ITStart xform(_ITStart its, _ITEnd ite, _Func func, _Value parm)
{
while (its != ite) { *its = func(*its, parm); its++; }
return its;
}
...
int mul(int a, int b) { return a*b; }
vector< int > v;
xform(v.begin(), v.end(), mul, 3); /* will multiply each element of v by 3 */
Кроме того, это не «безопасная» функция, вы должны выполнить проверку типа / значения и т. Д. Перед ее использованием.