在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或测试是否平等?你能否澄清这一点,因为你没有显示你想要的操作的代码? –