有很多方法,但标准解决方案是使用std::transform http://en.cppreference.com/w/cpp/algorithm/transform与 lambda 使用std::to_string http://en.cppreference.com/w/cpp/string/basic_string/to_string对于转换:
std::transform(std::begin(doubleVec),
std::end(doubleVec),
std::back_inserter(doubleStr),
[](double d) { return std::to_string(d); }
);
您可以将其包装在函数模板中,使其与任何符合标准的容器一起使用:
template<class IteratorIn, class IteratorOut>
void to_string(IteratorIn first, IteratorIn last, IteratorOut out)
{
std::transform(first, last, out,
[](typename std::iterator_traits<IteratorIn>::value_type d) { return std::to_string(d); } );
}
Or in C++14,使用通用 lambda :
template<class IteratorIn, class IteratorOut>
void to_string(IteratorIn first, IteratorIn last, IteratorOut out)
{
std::transform(first, last, out, [](auto d) { return std::to_string(d); } );
}
并用任何容器调用它(即它与std::list<int>
, 例如) :
to_string(std::begin(doubleVec), std::end(doubleVec), std::back_inserter(doubleStr));
Notes :
- 如果您没有 C++11 编译器,请编写自己的编译器
to_string
函数模板:
Example:
template<class T>
std::string my_to_string(T v)
{
std::stringstream ss;
ss << v;
return ss.str();
}
并以类似的方式使用它:
std::transform(doubleVec.begin(),
doubleVec.end(),
std::back_inserter(doubleStr),
my_to_string<double> );
- 你应该reserve() http://en.cppreference.com/w/cpp/container/vector/reserve输出向量中的内存以避免在期间重新分配
std::transform()
:
例如做这个 :
std::vector<std::string> stringVec;
stringVec.reserve(v.size()); // reserve space for v.size() elements
现场演示 http://coliru.stacked-crooked.com/a/76f397afed2f9b60