u014327136 于 2016.09.19 11:46 提问

`````` #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);
}

``````

4个回答

shihengzhen101   2016.09.19 12:23

`````` void moveZeroes(vector<int>& nums) {
vector<int>::iterator  n;

int nCount = 0;
for(n=nums.begin();n != nums.end();)
{
if((*n)==0)
{
n = nums.erase(n);
//nums.push_back(0);
++nCount;
}
else
{
n++;
}
}

while(nCount > 0)
{
nums.push_back(0);
--nCount;
}

for(n=nums.begin();n<nums.end();n++)
{
cout<<*n<<" ";
}
}
``````
u014327136 可以了，谢谢！

shihengzhen101   2016.09.19 11:55

``````     void moveZeroes(vector<int>& nums) {
vector<int>::iterator  n;
for(n=nums.begin();n<nums.end();)
{
if((*n)==0)
{
n = nums.erase(n);
nums.push_back(0);
}
else
{
n++;
}
}
for(n=nums.begin();n<nums.end();n++)
{
cout<<*n<<" ";
}
}
``````
shihengzhen101 回复yukangliu: 试试我下边这种改法

shihengzhen101 回复yukangliu: 不应该在循环中继续插入

shihengzhen101 按照我说卡死了？

u014327136 额，输入数据后就卡死了

hijack00   2016.09.19 12:35

predictator可以写成下面这样
bool pred(int x) { return x != 0;}

u014327136 谢谢，这个方法刚好适合，就是有点复杂

feng1790291543      2016.09.19 13:14

for(n=nums.begin();n != nums.end();)
{
if((*n)==0)
{
n = nums.erase(n);
//nums.push_back(0);
++nCount;
}
else
{
n++;
}
}

``````
``````

`````` if (it == end())
{
xxx
}

else
{
xxx
}
``````