优选算法------双指针专题 1.移动零 2.复写零
一.移动零
题目传送门\]([283. 移动零 - 力扣(LeetCode)](https://leetcode.cn/problems/move-zeroes/description/))
#### 1.题目描述

#### 2.算法原理
数组划分 数组分块
什么意思呢?就是把数组按要求划分模块
比如这道题,就是把数组划分成两个模块,前边是非0,后边是0

两个指针dest cur 将数组划分为三部分

两指针作用:
cur:从左向右扫描数组,遍历数组,cur左边就是处理过的,右边就是未处理的
dest:已处理的区间内,最后一个非0的位置
从而可以分为三个区间

当cur到n时,最后一个区间不见了,只剩下前两个区间,并且前边是非0,后边是0
cur指向第一个元素。dest因为还没有确定最后一个非0元素的位置,所以先指向-1
cur移动时会遇见两种情况
1.遇到0时,cur++,从而保证\[dest+1,cur-1\]这个区间是0
代码就是cur++
2.遇到非0时,要让这个 值加入到第一个区间,也就是\[0.dest\]这个区间,所以要dest移动到下一个位置从而扩大这个区间,并且dest移动到0,再交换此时dest和cur的位置
代码就是
swap(dest+1,cur)
dest++,cur++
#### 3.代码实现
```cpp
class Solution {
public:
void moveZeroes(vector