
C++11 for循环的新写法(用于实现LeetCode238.移除零)
发布日期:2021-05-20 07:54:52
浏览次数:19
分类:精选文章
本文共 1321 字,大约阅读时间需要 4 分钟。
C++11 for循环的新写法
1. 示例代码
在C++11更新中,for循环的写法得到了简化,更加简洁和易于理解。以下是示例代码:
#include#include using namespace std;int main() { vector numbers = {3, 4, 5, 6, 0, 2, 4}; for (int num : numbers) { if (num != 0) { cout << num << " "; } } return 0;}
2. 运行结果
运行上述代码,输出结果为:3 4 5 6 2 4
,即去掉了零,保留了非零元素的顺序。
实现LeetCode238:移除零
1. AC代码
传统的解法是使用双重循环,逐步收集非零元素,排除零。
class Solution {public: void moveZeroes(vector & nums) { int index = 0; for (int num : nums) { if (num != 0) { nums[index++] = num; } } int len = nums.size(); while (index < len) { nums[index++] = 0; } }};
2. 大佬代码
另一种高级方法使用了C++的stable_partition
函数来实现这一操作。
class Solution {public: void moveZeroes(vector & nums) { stable_partition(nums.begin(), nums.end(), [](int a) { return a != 0; }); }};
解题思路
使用事务式stable_partition
函数,它会将区间内满足给定条件的元素前置非零元素,而零全保留在后边,同时保持非零元素的初始顺序。这样就可以在O(n)时间复杂度内完成任务,避免了传统双重循环的O(n^2)效率问题。
扩展知识:常用的vector初始化方式
向量初始化有多种方式,常用方式包括:
- 使用大小和值初始化:
vector vec(n, 0);
- 指定初始值或元素:
vector vec = {1, 3, 2, 5, 7};
- 从其他数据结构初始化:
vector vec(otherVec.begin(), otherVec.end());
这些初始化方式根据具体需求选择,灵活和高效。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年05月16日 20时30分37秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
mac删除appstore账号和更新失败的问题
2025-04-11
Mac单机安装Hadoop
2025-04-11
mac地址随机变化的解决方法(安卓手机通用)不用ROOT
2025-04-11
Mac备忘录内容突然全部消失恢复
2025-04-11
mac如何查看连过的wifi密码
2025-04-11
mac安全权限解决
2025-04-11
Mac安装FastDFS
2025-04-11
Mac安装Maven
2025-04-11
Mac安装MySQL详细教程
2025-04-11
Mac实现远程服务器登录管理
2025-04-11
mac常用命令
2025-04-11
Mac打包dmg文件(更换背景图)
2025-04-11
Mac搭建appium环境
2025-04-11
Mac搭建Cocos2d-x 3.x android打包环境
2025-04-11
mac更新后 homestead 无法使用
2025-04-11
Mac环境下安装Redis
2025-04-11
mac环境安装docker
2025-04-11
Mac环境安装ElasticSearch
2025-04-11
Mac环境安装ElasticSearch-head
2025-04-11
MAC生成公钥私钥、PKCS1 转 PKCS8
2025-04-11