我正在尝试实现一个函数,用于将对象数组移动到数组的右侧.我在互联网上找到的所有内容都是循环移位的实现,但这不是我想要的.如果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]开始.但这似乎不是很有效.
还有其他想法吗?
假设数组有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.
| 归档时间: |
|
| 查看次数: |
12017 次 |
| 最近记录: |