std :: string到std :: array?

时间:2012-04-17 11:52:40

标签: c++ 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;
    std::copy(v.begin(), v.end(), d.data());
    return d;
}

C ++ 11或Boost是否提供这样的东西?其他人如何做到这一点?似乎很傻,每次我在项目中需要时都要自己复制/粘贴这个功能。

4 个答案:

答案 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<>,但可能适合您的需求。