Я искал лучший способ lcase / ucase класса C ++ STL, и я наткнулся на этот пост:
строка STL в нижнем регистре
Один избыли даны следующие решения:
#include <algorithm>
#include <string>
std::string data = “Abc”;
std::transform(data.begin(), data.end(), data.begin(), ::tolower);
Однако преобразование определяется в stl_algo.h как:
template<typename _InputIterator, typename _OutputIterator,
typename _UnaryOperation>
_OutputIterator
transform(_InputIterator __first, _InputIterator __last,
_OutputIterator __result, _UnaryOperation __unary_op)
{
...
Так почему же он вызывается без предоставления параметров создания шаблона?
Чтобы прояснить мой вопрос, я ожидал, что функция преобразования будет вызываться следующим образом:
transform(std::string::iterator, std::string::iterator,
/* not sure what to put here for the predicate */);
Это единичный случай (особый случай) или я что-то упустил из фундаментального?