2012-10-24 36 views
4

在C++中说,我们有两个数组:设置一个数组等于另一个没有环

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

如果我们想设置,例如,一个等于b,我们如何能做到这一点不使用循环?

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

编辑:对不起,应该已经明确,我不希望使用标准库函数(包括其中一些你所提到的memcpy)

+0

结果是什么? a == {5,4,3,2,1} – Max

+1

您可以使用'std :: array'和'a = b;'。 – chris

+0

您的意思是将b分配给a或测试是否平等?你能否澄清这一点,因为你没有显示你想要的操作的代码? –

回答

7

递归:

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

我不明白递归的需要,虽然,使用memcpy()反而是更好的。

5

你可以使用memcpy()

memcpy(a, b, sizeof(a)); 
+0

它在什么库中?我似乎无法在C++中找到它。 –

+0

[''](http://www.cplusplus.com/reference/cstring/memcpy/) –

11

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

std::copy(std::begin(b), std::end(b), std::begin(a)); 

std::beginstd::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; 
} 

或者,你可以使用std::array(或从升压为旧的编译等价),并赋值运算符:

std::array<int, 5> a = {1,2,3,4,5}; 
std::array<int, 5> b = {5,4,3,2,1}; 
a = b; 
+2

如果我想在没有内置函数的情况下执行操作,该怎么办? – nan

+2

@ user1693091没有内置函数和没有循环?我不明白这些要求。我可以在站立的同时用一只手在背后做内置功能,但我为什么要这样做? –

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

memcpy(a, b, sizeof(a)); 
3

memcpy的作品,但你可以使用memmove也该得心应手,如果你有过精研内存位置不爆炸(在你的例子不太可能,但是如果你的逻辑,例如,它可能会发生“克隆”功能)。

memmove(a, b, sizeof(a)); 

当然,如果你确定自己的源和目标,然后不重叠memcpy是罚款。

相关问题