array_merge与数组(array)相加的区别

array_merge与数组(array)相加的区别

之前每次面试 我发现面试到基础部分的时候 这个问题 出现的频率 特别高 ,
所以在这里写出来 , 加深下印象 也希望可以帮到更多的人.

例子1:

$a = ['one','two'];
$b = ['three','four','five'];
var_dump(array_merge($a,$b));
/*
array (size=5)
  0 => string 'one' (length=3)
  1 => string 'two' (length=3)
  2 => string 'three' (length=5)
  3 => string 'four' (length=4)
  4 => string 'five' (length=4)
  */
  
var_dump(array_merge($b,$a));
  /*
array (size=5)
  0 => string 'three' (length=5)
  1 => string 'four' (length=4)
  2 => string 'five' (length=4)
  3 => string 'one' (length=3)
  4 => string 'two' (length=3)
  */
var_dump($a+$b);
  /*
array (size=3)
  0 => string 'one' (length=3)
  1 => string 'two' (length=3)
  2 => string 'five' (length=4)
  */
var_dump($b+$a);
  /*
array (size=3)
  0 => string 'three' (length=5)
  1 => string 'four' (length=4)
  2 => string 'five' (length=4)
*/

例子2:

$a = ['name'=>'php','mysql'];
$b = ['DB'=>'mysql','test','name'=>'golang'];
var_dump(array_merge($a , $b));
/*
array (size=4)
  'name' => string 'golang' (length=6)
  0 => string 'mysql' (length=5)
  'DB' => string 'mysql' (length=5)
  1 => string 'test' (length=4)
*/
var_dump($a + $b );
/*
array (size=3)
  'name' => string 'php' (length=3)
  0 => string 'mysql' (length=5)
  'DB' => string 'mysql' (length=5)
*/

例子3:

$a = ['mysql','name'=>'php',3=>'html'];
$b = [1=>'test','name'=>'golang',2=>'mysqli','javascript'];
var_dump(array_merge($a , $b));
/*
array (size=6)
  0 => string 'mysql' (length=5)
  'name' => string 'golang' (length=6)
  1 => string 'html' (length=4)
  2 => string 'test' (length=4)
  3 => string 'mysqli' (length=6)
  4 => string 'javascript' (length=10)
*/
var_dump( $a + $b );
/*
array (size=5)
  0 => string 'mysql' (length=5)
  'name' => string 'php' (length=3)
  3 => string 'html' (length=4)
  1 => string 'test' (length=4)
  2 => string 'mysqli' (length=6)
*/

从以上例子可以看出:
当array_merge( a r r A , arrA, arrA,arrB) 会将$arrB数的成员 全部追加到参数arrA数组中去,
arrB将会覆盖掉arrA中的 字符类型 同键名值,其余的依次追加,
并且会将所有key值重新排列,关联数组自定义 字符类型 key值除外(参考例三)

而arrayA+arrayB时,不管是什么数组 arrayA都会将arrayB中的同键名值抛弃,其余追加至arrayA中,key不会重新排列

下面是一个示例代码,实现了数组相加的运算符重载: ``` #include <iostream> #include <algorithm> using namespace std; class SortedArray { private: int* data; int size; public: SortedArray(int n = 0) { data = new int[n]; size = n; } SortedArray(const SortedArray& other) { data = new int[other.size]; size = other.size; copy(other.data, other.data + other.size, data); } ~SortedArray() { delete[] data; } SortedArray& operator=(const SortedArray& other) { if (this != &other) { delete[] data; data = new int[other.size]; size = other.size; copy(other.data, other.data + other.size, data); } return *this; } SortedArray operator+(const SortedArray& other) const { SortedArray result(size + other.size); merge(data, data + size, other.data, other.data + other.size, result.data); return result; } void print() const { for (int i = 0; i < size; ++i) { cout << data[i] << " "; } cout << endl; } }; int main() { SortedArray a(5); for (int i = 0; i < 5; ++i) { a[i] = i * 2; } SortedArray b(4); for (int i = 0; i < 4; ++i) { b[i] = i * 3 + 1; } SortedArray c = a + b; c.print(); return 0; } ``` 在上面的示例代码中,`SortedArray` 类代表一个有序数组,它重载了复制构造函数、析构函数、赋值运算符和加法运算符。加法运算符实现的是两个有序数组的归并操作,将结果存放在一个新的有序数组中。`print()` 方法用于打印数组中的元素。 测试代码中创建了两个有序数组 `a` 和 `b`,它们分别包含一些整数。然后将它们相加得到 `c`,并打印出 `c` 中的元素。 运行上面的代码可以得到以下输出: ``` 0 1 2 3 4 5 7 9 ``` 可以看到,`c` 数组中的元素是有序的,符合题目要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值