The above code won't compile, and I can't make much sense out of the message the compiler returns. All I know is that the problem lies in the line with std::transform();
transform() runs the function concatter on all the elements in the range [vs.begin(), vs.end()). Basically, the function takes the current string and returns it. The result of the function (for each element) is stored in in the third argument, which appends that result to concat.
If the input was "I am a newbie", then transform() would begin with "I", concatter() would take that argument and return it, back_inserter() would push it back into concat ... and so on.
std::back_inserter uses .push_back() member to insert elements in sequence. concat is a std::string, type of value we operate on is std::string (value contained in vs). And there is no overload std::string::push_back() which accepts std::string
auto first1 = vs.begin();
auto last1 = vs.end();
while ( first1 != last1 ) {
concat.push_back( concatter( *first1 ) ); // error, there is no string::push_back(string)
++first1;
}