你可以使用两个指针来实现这个功能:一个指向当前元素,另一个指向数组末尾的位置。遍历数组,将非零元素复制到指向数组末尾位置的指针所指向的位置,并将末尾位置的指针向前移动;如果遇到零元素,则只移动当前元素的指针,不进行复制操作。最后,将数组剩余的位置填充零即可。以下是一个示例代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
void moveZeroes(vector<int>& nums) {
int n = nums.size();
int left = 0, right = 0;
while (right < n) {
if (nums[right] != 0) {
nums[left] = nums[right];
left++;
}
right++;
}
while (left < n) {
nums[left] = 0;
left++;
}
}
int main() {
vector<int> nums = {0, 1, 0, 3, 12};
moveZeroes(nums);
for (int num : nums) {
cout << num << " ";
}
cout << endl;
return 0;
}
```
这个代码中,`left` 指针指向当前非零元素应该存放的位置,`right` 指针用于遍历数组。当遇到非零元素时,将其复制到 `left` 指针指向的位置,并将 `left` 指针向后移动;遇到零元素时,只将 `right` 指针向后移动。最后,将剩余的位置填充零。