C++中如何将std::array的内容复制到另一个std::array中?
实现方案
你可以通过以下两种无for循环的方案实现std::array的内容复制,两种方案都和C风格数组的strcpy_s行为一致:
方案1:通用类型兼容方案(适用于任意类型的std::array)
使用标准库<algorithm>头文件提供的std::copy算法,无需手动写循环,类型安全且通用:
#include <array> #include <algorithm> std::array<char, 20> test = {"asdasd"}; std::array<char, 19> test2 = {"asdassdsdfd"}; // 复制test2的全部元素到test的起始位置 std::copy(test2.begin(), test2.end(), test.begin());
方案2:字符串场景兼容方案(和原C风格数组写法逻辑完全一致)
如果操作的是char类型std::array存储的C风格字符串,可以直接沿用strcpy_s,通过std::array的data()方法获取底层原生数组指针,size()方法获取数组容量即可:
#include <array> #include <cstring> std::array<char, 20> test = {"asdasd"}; std::array<char, 19> test2 = {"asdassdsdfd"}; strcpy_s(test.data(), test.size(), test2.data());
该方案会自动处理字符串的\0终止符,越界时的安全报错逻辑也和原C数组写法完全相同。
补充说明
如果你只需要做内存拷贝(不涉及字符串终止符处理),也可以用std::memcpy实现,仅适用于平凡可复制类型(比如char、int等基础类型):
std::memcpy(test.data(), test2.data(), std::min(test.size(), test2.size()));
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

