【发布时间】:2012-10-03 07:22:04
【问题描述】:
我正在尝试实现一个将对象数组移动到数组右侧的函数。我在互联网上发现的只是循环轮班的实现,但这不是我想要的。如果右侧实际上有空白空间,我想将元素向右移动。 假设您创建了一个对象 Packet 数组,其大小为 10
Packet* a[] = { p4 , p3 , p2 , p1, null, null, null, null, null, null }
移位功能只会将所有内容向右移动
{ null ,p4 , p3 , p2 , p1, null, null, null, null, null }
如果数组末尾有一个元素
{ p10, p9, p8, p7 ,p6 ,p5 ,p4 , p3 , p2 , p1}
这个函数不会改变任何东西。
{ p4 , p3 , p2 , p1, null, null, null, null, null, null }
我的实现想法是将数组复制到一个临时数组中, 擦除原始数组上的所有内容,然后复制到其中,但从位置 [1] 而不是位置 [0] 开始。但这似乎效率不高。
还有其他想法吗?
【问题讨论】:
-
那么如果最后一个元素被填满了,就不要移位了?为什么不单独检查,然后快速
std::rotate? -
问题的标题是 C,但标签是 C++。克里斯评论中的建议仅是 C++。 Eduardo 在下面的回答在 C++ 中可能是一个非常糟糕的主意,我只认为它是 C。请具体说明语言。
-
是的,我同意 Nathan,只在 C 中使用它
-
你关心指向数组中间的指针/引用/迭代器会发生什么,当你做转变时?这在以下答案之间有所不同,其中一些答案的引用值发生了变化,其中一些答案的引用值没有改变,其中一个答案(在撰写本文时)引用本身无效。