设置一个数组等于另一个没有循环的数组

nan*_*nan 6 c++ arrays recursion

在C++中我们说有两个数组:

a[5] = {1,2,3,4,5};
b[5] = {5,4,3,2,1};
Run Code Online (Sandbox Code Playgroud)

例如,如果我们想要设置等于b,那么如何在不使用循环的情况下实现这一目标?

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

编辑:对不起,应该说清楚我不想使用标准库函数(包括你们有些人提到过的memcpy)

egr*_*nin 16

int a[5] = {1,2,3,4,5};
int b[5] = {5,4,3,2,1};

memcpy(a, b, sizeof(a));
Run Code Online (Sandbox Code Playgroud)


R. *_*des 11

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

std::copy(std::begin(b), std::end(b), std::begin(a));
Run Code Online (Sandbox Code Playgroud)

std::begin并且std::end是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;
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用std::array(或等效于Boost的旧编译器)和赋值运算符:

std::array<int, 5> a = {1,2,3,4,5};
std::array<int, 5> b = {5,4,3,2,1};
a = b;
Run Code Online (Sandbox Code Playgroud)

  • 如果我想在没有内置功能的情况下这样做怎么办? (2认同)
  • @ user1693091没有内置函数且没有循环?我不明白这些要求.我可以在站立时使用内置功能并用一只手在我的背后,但为什么我呢? (2认同)

Max*_*Max 7

随着递归:

void copy(int *a, int *b, int b_size) {
     if(b_size == 0) return;    
     *a = *b;
     copy(++a, ++b, b_size-1);
}
Run Code Online (Sandbox Code Playgroud)

我不明白递归的必要性,使用memcpy()反而更好.


Pet*_*uck 6

你可以使用memcpy():

memcpy(a, b, sizeof(a));
Run Code Online (Sandbox Code Playgroud)