2012-10-24 40 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是罰款。

相關問題