std :: string到std :: array?

XTF*_*XTF 6 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;
}
Run Code Online (Sandbox Code Playgroud)

C ++ 11或Boost是否提供类似的信息?别人怎么做?每次我在项目中需要此功能时,似乎都不得不自己复制/粘贴该功能,这很愚蠢。

R. *_*des 6

这似乎很好。C++11 中没有这样的东西,我认为 Boost 中也没有。如果你不想把它粘贴到所有地方,你可以把它放在一个标题#include中。

  • 你在*每个*项目中都需要这个?我觉得它具有特定的利基用途。这就是为什么你在 C++11 或 boost 中找不到它的原因:它不是一个基本的东西。 (3认同)
  • 通常,当您在公司中有一系列项目时,您会将它们放在一个具有公共库的物理目录层次结构中。专业人士不会将他们想要使用的 boost 文件复制到每个使用它们的项目中;他们有一份 boost 副本,并在他们的项目中从同一位置使用它。同样,如果您有一个包含此函数的实用程序库头文件,则不必将其复制到每个项目,而是在特殊位置使用一个头文件。这样,如果您必须修复功能或更新,您就不会多次处理代码分歧和错误修复。 (3认同)

Dav*_* L. 5

只需调用:

std::copy(v.begin(), v.end(), d.data());
Run Code Online (Sandbox Code Playgroud)

的方式将字符串转换为数组。我认为将其包装到专用的“实用程序”函数中没有任何优势。

此外,除非编译器对其进行优化,否则您的函数可能会降低性能:返回数组时将第二次复制数据。