Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将一个数组设置为不带循环的另一个数组 C++中有两个数组: a[5] = {1,2,3,4,5}; b[5] = {5,4,3,2,1};_C++_Arrays_Recursion - Fatal编程技术网

将一个数组设置为不带循环的另一个数组 C++中有两个数组: a[5] = {1,2,3,4,5}; b[5] = {5,4,3,2,1};

将一个数组设置为不带循环的另一个数组 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

例如,如果我们想将a设置为等于b,我们如何在不使用循环的情况下实现这一点

我的想法是使用递归,但我不确定如何使用

编辑:对不起,我应该清楚地表明我不想使用标准库函数(包括一些人提到的memcpy)

您可以使用
memcpy()


可以使用标准库中的复制算法

std::copy(std::begin(b), std::end(b), std::begin(a));
<>代码> STD::开始和 STD::Endo/<代码>是C++标准库中的新的,但是对于不支持它们的编译器来说,它们很容易实现:

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) );