我们可以使用构造函数作为谓词吗?到目前为止,我能够做到的是:
std::vector<const char*> v1 = {
"Hello", "from", "GCC", __VERSION__, "!"
};
std::vector<std::string> v2(v1.size());
std::transform(v1.begin(), v1.end(), v2.begin(),
[] (const char* s) { return std::string(s); });
但我想要某种方式做std::tranform( ..., std::string)
。我已尝试std::string::string
,std::string::basic_string
和std::string::basic_string<char>
。
答案 0 :(得分:7)
我会这样做:
std::vector<std::string> v2(v1.begin(), v1.end());
答案 1 :(得分:1)
做一个简单的
std::vector<std::string> v2;
v2.reserve(v1.size()); // Not really needed
for(auto x : v1) v2.emplace_back(x);
答案 2 :(得分:0)
诀窍是我们需要将typename
传递给template
,然后我们可以使用它来调用你想要的构造函数。
以下是我提出的建议:
template<typename source, typename destination, typename iter, typename iter2>
void transform_object(iter begin, iter end, iter2 begin2)
{
std::transform(begin, end, begin2, [](source s){ return destination(s); } );
}
并将其与原始代码一起使用:
transform_object<const char*, std::string>(v1.begin(), v1.end(), v2.begin());