标准::字符串到标准::数组
Std::string to std::array?
将字符串转换为数组的推荐方法是什么?我正在寻找类似的东西:
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 是否提供这样的东西?其他人是怎么做到的?每次我在项目中需要它时都必须自己复制/粘贴这个函数似乎很愚蠢。
这似乎很好。C++11 中没有这样的东西,我认为 Boost 中也没有这样的东西。如果您不想将其粘贴到处都是,则可以将其放在标题中并#include
。
只需调用:
std::copy(v.begin(), v.end(), d.data());
是将字符串转换为数组的方法。我认为将其包装到专用的"实用程序"函数中没有任何优势。
此外,除非编译器对其进行优化,否则函数的性能可能会下降:返回数组时,数据将被第二次复制。
如果你真的只想将字符串转换为数组,只需使用.c_str()
(并处理char*
)。它并不完全array<>
,但可能适合您的需求。
没关系,也许在 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 是原始数组,此函数也将起作用。
它不适用于 std::string,但如果您使用的是 C 字符串文字(char const *),C++20 为这种事情引入了std::to_array
:
std::array arr {"Hello, world!"};
https://en.cppreference.com/w/cpp/container/array/to_array
相关文章:
- 效率:标准::数组与标准::矢量
- 多维标准::数组的可变参数模板
- 声明后,gcc 的动态大小数组是否与标准数组有效相同?
- C++填充多维标准::数组
- 如何声明 2D 标准::数组
- 如何查找 2d 标准::数组中的列数
- 基于多维标准::数组的范围
- 如何按降序对标准数组进行排序 - C++ 11.
- 优雅地声明 2 维(甚至多维)标准::数组
- 如何将标准::数组转换为标准::元组?
- 获取别名标准::数组的大小
- 如何找到多维标准::数组的大小
- C++ constexpr:在编译时计算标准数组
- 标准::数组类上的堆栈溢出
- 2-D 标准::数组的支撑初始值设定项列表(C++)
- 标准::数组是否可安全返回
- C++ 将双倍转换为字符并替换为标准::数组
- 解压缩标准::数组
- 动态标准数组的大小
- 打印一个标准::数组