在C++中說,我們有兩個數組:設置一個數組等於另一個沒有環
a[5] = {1,2,3,4,5};
b[5] = {5,4,3,2,1};
如果我們想設置,例如,一個等於b,我們如何能做到這一點不使用循環?
我的想法是使用遞歸,但我不完全確定如何。
編輯:對不起,應該已經明確,我不希望使用標準庫函數(包括其中一些你所提到的memcpy)
在C++中說,我們有兩個數組:設置一個數組等於另一個沒有環
a[5] = {1,2,3,4,5};
b[5] = {5,4,3,2,1};
如果我們想設置,例如,一個等於b,我們如何能做到這一點不使用循環?
我的想法是使用遞歸,但我不完全確定如何。
編輯:對不起,應該已經明確,我不希望使用標準庫函數(包括其中一些你所提到的memcpy)
遞歸:
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, b, sizeof(a));
它在什麼庫中?我似乎無法在C++中找到它。 –
['
您可以使用標準庫中的複製算法。
std::copy(std::begin(b), std::end(b), std::begin(a));
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;
}
或者,你可以使用std::array
(或從升壓爲舊的編譯等價),並賦值運算符:
std::array<int, 5> a = {1,2,3,4,5};
std::array<int, 5> b = {5,4,3,2,1};
a = b;
如果我想在沒有內置函數的情況下執行操作,該怎麼辦? – nan
@ user1693091沒有內置函數和沒有循環?我不明白這些要求。我可以在站立的同時用一隻手在背後做內置功能,但我爲什麼要這樣做? –
int a[5] = {1,2,3,4,5};
int b[5] = {5,4,3,2,1};
memcpy(a, b, sizeof(a));
memcpy
的作品,但你可以使用memmove
也該得心應手,如果你有過精研內存位置不爆炸(在你的例子不太可能,但是如果你的邏輯,例如,它可能會發生「克隆」功能)。
memmove(a, b, sizeof(a));
當然,如果你確定自己的源和目標,然後不重疊memcpy
是罰款。
結果是什麼? a == {5,4,3,2,1} – Max
您可以使用'std :: array'和'a = b;'。 – chris
您的意思是將b分配給a或測試是否平等?你能否澄清這一點,因爲你沒有顯示你想要的操作的代碼? –