Я понимаю, что вам следует избегать перемещения char
s между контейнерами.В этом простом случае не слишком сложно записать все в result
напрямую:
auto result = accumulate(cbegin(request->paramsMap), cend(request->paramsMap), vector<char>{ '<', 't', 'r', '>', '<', '/', 't', 'r', '>' }, [](auto& init, const auto& i) {
const char start[] = { '<', 't', 'r', '>', '<', 't', 'd', '>' };
const char middle[] = { '<', '/', 't', 'd', '>', '<', 't', 'd', '>' };
const char finish[] = { '<', '/', 't', 'd', '>', '<', '/', 't', 'r', '>' };
init.insert(prev(cend(init), 5U), cbegin(start), cend(start));
init.insert(prev(cend(init), 5U), i.first, next(i.first, strlen(i.first)));
init.insert(prev(cend(init), 5U), cbegin(middle), cend(middle));
init.insert(prev(cend(init), 5U), i.second, next(i.second, strlen(i.second)));
init.insert(prev(cend(init), 5U), cbegin(finish), cend(finsh));
return init;
} );
copy(cbegin(result), cend(result), ostream_iterator<char>{ DEBUG_LOG_F });
result.insert(cbegin(result), RESPONSE_HEADER, next(RESPONSE_HEADER, strlen(RESPONSE_HEADER)));
result.insert(cend(result), RESPONSE_FOOTER, next(RESPONSE_FOOTER, strlen(RESPONSE_FOOTER)));
return result;