将字符串转换为数组的推荐方法是什么?我正在寻找类似的东西:
template<class T, size_t N, class V>
std::array<T, N> to_array(const V& v)
{
assert(v.size() == N);
std::array<T, N> d;
std::copy(v.begin(), v.end(), d.data());
return d;
}
C ++ 11或Boost是否提供这样的东西?其他人如何做到这一点?似乎很傻,每次我在项目中需要时都要自己复制/粘贴这个功能。
答案 0 :(得分:4)
看起来很好。在C ++ 11中没有这样的东西,我也不认为Boost中有一个。如果您不想将其粘贴到整个地方,只需将其放在标题中#include
即可。
答案 1 :(得分:1)
没关系,可能只是对C ++ 11进行了一些修改。
template<class T, size_t N, class V>
std::array<T, N> to_array(const V& v)
{
assert(v.size() == N);
std::array<T, N> d;
using std::begin; using std::end;
std::copy( begin(v), end(v), begin(d) ); // this is the recommended way
return d;
}
这样,如果删除断言,即使v是原始数组,该函数也能正常工作。
答案 2 :(得分:1)
只需致电:
std::copy(v.begin(), v.end(), d.data());
是将字符串转换为数组的方式。我认为将其包装成专用的“实用程序”功能没有任何优势。
此外,除非编译器对其进行优化,否则性能可能会因函数而降低:返回数组时,数据将被第二次复制。
答案 3 :(得分:0)
如果您真的只想将 string 转换为数组,只需使用.c_str()
(并使用char*
)。它不完全是array<>
,但可能适合您的需求。