C++ STL中 for_each 算法存在的意义是什么?
我问题描述里在for循环里用auto是为了和for_each里的begin与end相呼应,我知道有范围for循环这个概念,我也知道那个迭代器有个类型好复杂的,只是提问的时候想不起来了又懒得翻书就写了个auto。
我的提问点是for_each和普通for循环在写法结构相似——1都要写明循环起始终止条件,2循环体里的func单独抽出来定义和用lambda表达式写法也很相似,仅仅是少了一些变量类型的定义),那么单独开发一个for_each作为标准库的意义在哪里。
我的重点不是auto,不是auto,不是auto!请忽略那个auto!!!!
请大神们不要用range based for这个概念来砸我,好委屈哇呜呜。
(1)感谢得赞不高的几位,我已经给你们单独点赞,因为你们从正面直截了当地回答了我心中的疑惑,让我立刻放下纠结,得到释怀。
(2)写发苹果故事的那位阿邱同学,创意很不错,但是没有正面回答,而是讲故事的方式引导我,反而让我陷入了新一轮的疑惑,有空咱们继续讨论讨论,交个朋友。
(3)还有一些拿范围for循环概念砸我的,我不说话了,我问A和B相比怎么样,你告诉我用C更好,好委屈,也怪我没有描述好问题,让你们理解错了。
(4)一个小问题,能让各路大神替我解惑,深感荣幸。谢谢大家!
----------原问题如下--------------
最近学习《c++primer 5》,闲暇时思考人生,琢磨for_each这个算法的存在意义是什么?
<algorithm>头文件中,比如sort、unique、find_if等等,类似matlab一样封装了复杂的代码,使我们可以避免浪费时间在基础经典算法上,并且运行效率高,也使得代码简洁易懂。
当学到for_each的时候,我把以前作业里的代码套进for_each中,虽然都成功运行,却让我满头雾水:明明一个for循环就能表达,为什么要用for_each?它的好处在哪?
比如下面一段代码:(知乎编辑代码真难写,格式不对齐,还不知道写错没有)
vector<T> data = xxoo;
for_each(data.begin(), data.end(), [](vector<T>& d) { func(d); } );
而原本用for循环
for(auto it = data.begin(); it != data.end(); ++it)
{
func(*it);
}
------
从简洁的角度,虽然for_each代码只占一行,但是它的lambda表达式相当于把一坨代码挤到了一起,如果func函数代码很长,还是要分行写。
从可读性来说,一个for循环的可读性比for_each高的不知道哪里去。
那从效率方面呢?STL标准库里对for_each的解释貌似也是一个循环,只不过是while循环。
综上所述,for_each即不美观,也欠可读,效率也没提升,它的存在意义是什么?
有人能举个例子表明它的优越性么?
-----
Ad blocker detected: Our website is made possible by displaying online advertisements to our visitors. Please consider supporting us by disabling your ad blocker on our website.
C++ STL中 for_each 算法存在的意义是什么?
programmer 程式師 程序员
Return to “programmer 程式師 程序员”
Jump to
- ↳ business commerce trade trading 商業 商业
- ↳ Business Case 商業案例 商业案例
- ↳ manage 管理 管理
- ↳ agriculture 農業 农业
- ↳ agriculture 農業 农业
- ↳ hardware 硬體 硬件
- ↳ hardware 硬體 硬件
- ↳ motherboard 主機板 主板
- ↳ manned intermedia 載人的載具 载人的载具
- ↳ residential area 居民小區 居民小区
- ↳ residential area 居民小區 居民小区
- ↳ 广东·广州·越秀·大学城·和樾府
- ↳ software 軟體 软件
- ↳ software 軟體 软件
- ↳ c
- ↳ php
- ↳ ddns
- ↳ python
- ↳ Computer Aided Design 電腦輔助設計 计算机辅助设计
- ↳ manned intermedia Design 載人的載具設計 载人的载具设计
- ↳ creativity 創意 创意 idea 想法 想法 Works show 作品展示 作品展示
- ↳ dating 約會 约会 交友 Marriage 婚戀 婚恋
- ↳ Marriage 婚戀 婚恋
- ↳ 荷尔蒙飞扬 七日情侣 陌生人交友 陌陌 探探
- ↳ dating 約會 约会 交友
- ↳ education study examination 教育 學習 考試 教育 学习 考试
- ↳ 广州大学城论坛
- ↳ 济南大学城论坛
- ↳ emotional venting 情緒發洩 情绪发泄
- ↳ Violations of law and discipline are exposed 違法亂紀行為曝光 违法乱纪行为曝光
- ↳ Comment on various businesses. 對各種經營進行評論。 对各种经营进行评论。
- ↳ leisure && amusement | 休閒 娛樂 | 休闲 娱乐
- ↳ | Experienced programmer | The home of experienced programmer | 大齡程式師之家 | 大龄程序员之家 | 經驗豐富的程式師 | 经验丰富的程序员 |
- ↳ Life Records 生活記錄 生活记录
- general
- ↳ general
- citizen 公民 公民
- ↳ citizen 公民 公民
- ↳ let's make the rules 讓我們來製定規則 让我们来制定规则
- | Developer | 開發者 | 开发者 |
- ↳ | Developer | 開發者 | 开发者 |
- ↳ | Developer | 開發者 | 开发者 |
- ↳ | Developer Union | 開發者工會 | 开发者工会 |
- ↳ | The home of programmers | 程式師之家 | 程序员之家 |
- ↳ programmer 程式師 程序员
- ↳ Programmers Union 程式師工會 程序员工会
- ↳ Find Jobs/Post a Job 求職/發布職缺 找工作/发布职位
- | Exploration, research, various forms, miscellaneous talks | 探索、研究、百態、雜談 | 探索、研究、百态、杂谈 |
- ↳ | Exploration, research, various forms, miscellaneous talks | 探索、研究、百態、雜談 | 探索、研究、百态、杂谈 | 發現 发现 Discovery |
- ↳ education study examination 教育 學習 考試 教育 学习 考试
- ↳ driver license 駕照 驾驶证
- house : building , buy and sell , lease 房子:建设、买卖、租赁
- ↳ house : building , buy and sell , lease 房子:建设、买卖、租赁
- | Internet Refugee Shelter | 網路難民收容所 | 互联网难民收容所 |
- ↳ | Internet Refugee Shelter | 網路難民收容所 | 互联网难民收容所 |
- 儒教迫害受害者互助区
- ↳ 儒教迫害受害者互助区
- 广告区
- ↳ 广告区