#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
void moveZeroes(vector<int>& nums) {
vector<int>::iterator n;
for(n=nums.begin();n<nums.end();n++)
{
if((*n)==0)
{
nums.erase(n);
nums.push_back(0);
}
}
for(n=nums.begin();n<nums.end();n++)
{
cout<<*n<<" ";
}
}
};
int main()
{
int i,j;
vector <int> nums;
for(i=0;i<5;i++)
{
cin>>j;
nums.push_back(j);
}
Solution s;
s.moveZeroes(nums);
}
程序如上,要求:把所有的0移动到容器尾部;
如nums = [0, 1, 0, 3, 12], 调用函数之后, nums = [1, 3, 12, 0, 0];
然而,在输入num=[-1,2,-3,4,0,1,0,-2,0,0,1]后,
我的输出却为: [-1,2,-3,4,1,-2,0,1,0,0,0];
我觉得是因为nums.erase(n);返回位置为下一个数据的位置,循环中n++与其叠加,跳过了下一个数据造成的,
然不知如何修改,请大神赐教!