如何在c ++中将数组移到右边?

Alg*_*tic 3 c++ arrays shift

我正在尝试实现一个函数,用于将对象数组移动到数组的右侧.我在互联网上找到的所有内容都是循环移位的实现,但这不是我想要的.如果theres实际上是空的,那么我想将元素向右移动.假设您创建了一个对象Packet数组,其大小为10

Packet* a[] = { p4 , p3 , p2 , p1, null, null, null, null, null, null }
Run Code Online (Sandbox Code Playgroud)

换挡功能只会将一切都移到右边

{ null ,p4 , p3 , p2 , p1, null, null, null, null, null }
Run Code Online (Sandbox Code Playgroud)

并且在阵列末尾有一个元素的情况下

{ p10, p9, p8, p7 ,p6 ,p5 ,p4 , p3 , p2 , p1}
Run Code Online (Sandbox Code Playgroud)

这个功能不会改变任何东西.

 { p4 , p3 , p2 , p1, null, null, null, null, null, null }
Run Code Online (Sandbox Code Playgroud)

我的实现的想法是将数组复制到临时数组,擦除原始数组上的所有内容,然后复制到它,但从位置[1]而不是位置[0]开始.但这似乎不是很有效.

还有其他想法吗?

Edu*_*rdo 9

假设数组有n个元素:

if(a[n-1]==null){
   memmove(a+1, a, (n-1)*sizeof(Packet*));
   a[0]=null;
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是不移动数组的元素,而是移动用于访问它的索引.基本上,你想要做的是添加1模数n.

  • @sgroh`memmove`不会复制.它(通常)的作用是比较源地址和目标地址,如果目标地址高于源地址,则从最后一个移动到第一个地址.(换句话说,根据最合适的选择,它会自动在`copy`和`copy_backwards`之间进行选择.) (2认同)