leetcode 283---Move Zeroes&&对vector erase()和remove用法的感悟
来源:互联网 发布:数控加工中心软件 编辑:程序博客网 时间:2024/06/06 04:40
题目:https://leetcode.com/problems/move-zeroes/
题目很简单,代码如下:
class Solution {public: void moveZeroes(vector<int>& nums) { int counts=0; for (vector<int>::iterator i=nums.begin(); i!=nums.end(); ) { if (*i==0) { i=nums.erase(i); ++counts; }else{ ++i; } } for (int i=0; i<counts; ++i) { nums.push_back(0); } }};
关于erase()和remove()学到了几点,
erase(iterater a)会将a移除,返回a下一个iterator.
所以正确的写法如上,否则iterator会丢失。
---------
至于remove(iterator a, iterator b, value)则是移除[a,b)区间内所有为value值的vector元素,返回假设删除后的最后一个元素的iterator
但是vector.end()和vector.size()都不变,
如果想实现erase的效果,需要这样写:
nums.erase(remove(nums.begin(),nums.end(),0),nums.end());
------------
后来看看人家解法,其实貌似不用iterator简单一些(但是必须要倒叙来搞,正序搞的污染元素= =#),如下:
(但是这种做法真的真的好巧妙啊!)
class Solution {public: void moveZeroes(vector<int>& nums) { for(int i=nums.size()-1;i>=0;--i){ if(nums[i]==0){ nums.erase(nums.begin()+i); nums.push_back(0); } } }};
0 0
- leetcode 283---Move Zeroes&&对vector erase()和remove用法的感悟
- STL Vector remove()和erase()的使用
- STL Vector remove()和erase()的使用
- Vector remove()和erase()的使用
- STL Vector remove()和erase()的使用
- STL Vector remove()和erase()的使用
- STL Vector remove()和erase()的使用
- STL Vector remove()和erase()的使用
- STL Vector remove()和erase()的使用
- STL Vector remove()和erase()的使用
- STL Vector remove()和erase()的使用
- leetcode 283: Move Zeroes
- leetcode-283-Move Zeroes
- [leetcode 283]Move Zeroes
- LeetCode 283----Move Zeroes
- Leetcode #283 Move Zeroes
- leetcode: (283) Move Zeroes
- [LeetCode 283] Move Zeroes
- jvm 参数
- nyoj643
- 一、友录项目框架搭建
- 常用原生JS方法总结(兼容性写法)
- XMG s事件的传递顺序
- leetcode 283---Move Zeroes&&对vector erase()和remove用法的感悟
- 数据结构初学过程中对算法效率度量的理解
- [项目管理]关于风险管理的问题和可能过早的幼儿教育
- hdoj 1506 Largest Rectangle in a Histogram 【单调栈】
- [剑指offer]连续子数组的最大和
- java微信开发API解析(七)-网页开发-微信网页授权
- Linux软链接和硬链接
- Linux系统资源的相关命令
- linux文件系统之读流程 SYSCALL_DEFINE3(read, xxx)