将一个数组设置为不带循环的另一个数组 C++中有两个数组: a[5] = {1,2,3,4,5}; b[5] = {5,4,3,2,1};
例如,如果我们想将a设置为等于b,我们如何在不使用循环的情况下实现这一点 我的想法是使用递归,但我不确定如何使用 编辑:对不起,我应该清楚地表明我不想使用标准库函数(包括一些人提到的memcpy)您可以使用将一个数组设置为不带循环的另一个数组 C++中有两个数组: a[5] = {1,2,3,4,5}; b[5] = {5,4,3,2,1};,c++,arrays,recursion,C++,Arrays,Recursion,例如,如果我们想将a设置为等于b,我们如何在不使用循环的情况下实现这一点 我的想法是使用递归,但我不确定如何使用 编辑:对不起,我应该清楚地表明我不想使用标准库函数(包括一些人提到的memcpy)您可以使用memcpy(): 可以使用标准库中的复制算法 std::copy(std::begin(b), std::end(b), std::begin(a)); 代码> STD::开始和 STD::Endo/是C++标准库中的新的,但是对于不支持它们的编译器来说,它们很容易实现: template
memcpy()
:
可以使用标准库中的复制算法
std::copy(std::begin(b), std::end(b), std::begin(a));
<>代码> STD::开始和template <typename T, std::size_t N>
T* begin(T(&a)[N]) {
return &a[0];
}
template <typename T, std::size_t N>
T* end(T(&a)[N]) {
return begin(a) + N;
}
使用递归:
void copy(int *a, int *b, int b_size) {
if(b_size == 0) return;
*a = *b;
copy(++a, ++b, b_size-1);
}
但是我不理解递归的必要性,使用
memcpy()
更好。memcpy
可以工作,但如果内存位置重叠,也可以使用它,它不会轻易爆炸(在您的示例中不太可能,但如果您将逻辑转换为“克隆”函数,则可能会发生这种情况)
当然,如果您确信您的源和目标没有重叠,那么
memcpy
就可以了。结果如何?a=={5,4,3,2,1}您可以使用std::array
和a=b代码>。您的意思是将b分配给a还是测试是否相等?你能澄清一下吗,因为你没有显示你想要的操作的代码?根据编辑更新了我的答案。为什么没有循环?如果你不解释约束背后的原因,你很可能会得到对你没有帮助的答案。如果我想在没有内置函数的情况下完成它呢?@user1693091没有内置函数也没有循环?我不明白这些要求。我可以一边站着一边用一只手放在背后用内置功能来做,但为什么呢?它在哪个图书馆?我似乎找不到C++。
std::array<int, 5> a = {1,2,3,4,5};
std::array<int, 5> b = {5,4,3,2,1};
a = b;
int a[5] = {1,2,3,4,5};
int b[5] = {5,4,3,2,1};
memcpy(a, b, sizeof(a));
void copy(int *a, int *b, int b_size) {
if(b_size == 0) return;
*a = *b;
copy(++a, ++b, b_size-1);
}
memmove( a, b, sizeof(a) );