Abstract
若用C語言配合迴圈,這是個很簡單的題目,但若用C++配合STL,則有很漂亮的寫法。
Introduction
陣列中有2、3、1、3、5五個值,希望能列出大於2的所有元素。
C++
1 /*
2 (C) OOMusou 2008 http://oomusou.cnblogs.com
3
4 Filename : GenericAlgo_remove_copy_if_predicate.cpp
5 Compiler : Visual C++ 8.0
6 Description : Demo how to use remove_copy_if() & predicate
7 Release : 01/29/2008 1.0
8 */
9
10 #include <iostream>
11 #include <algorithm>
12 #include <functional>
13
14 using namespace std;
15
16 int main() {
17 int ia[] = {2, 3, 1 ,3 ,5};
18 int arr_size = sizeof(ia) / sizeof(int);
19
20 remove_copy_if(ia, ia + arr_size, ostream_iterator<int>(cout, " "), bind2nd(less_equal<int>(), 2));
21 }
2 (C) OOMusou 2008 http://oomusou.cnblogs.com
3
4 Filename : GenericAlgo_remove_copy_if_predicate.cpp
5 Compiler : Visual C++ 8.0
6 Description : Demo how to use remove_copy_if() & predicate
7 Release : 01/29/2008 1.0
8 */
9
10 #include <iostream>
11 #include <algorithm>
12 #include <functional>
13
14 using namespace std;
15
16 int main() {
17 int ia[] = {2, 3, 1 ,3 ,5};
18 int arr_size = sizeof(ia) / sizeof(int);
19
20 remove_copy_if(ia, ia + arr_size, ostream_iterator<int>(cout, " "), bind2nd(less_equal<int>(), 2));
21 }
執行結果
3 3 5
20行
remove_copy_if(ia, ia + arr_size, ostream_iterator<int>(cout, " "), bind2nd(less_equal<int>(), 2));
我們知道copy()可將陣列內的元素透過ostream_interator顯示,而目前只想列出大於2的元素,直覺會想找copy_if(),但STL並沒有提供copy_if(),只提供了remove_copy_if(),所以得反向思考,所謂的『大於2』相當於剔除所有『小於等於2』的元素,所以我們必須使用less_equal<int>()這個binary predicate,由於現在是『小於等於2』,所以還需要bind2nd()將2 bind給less_equal<int>()。
Conclusion
這種functional programming的寫法,和傳統的寫法不太一樣,需要一段時間適應,C#之父Anders Hejisberg也認為functional programming將越來越重要,所以C# 3也開始支援lambda,而STL和boost更早已將這種functional programming發揮的淋漓盡致。
分类:
STL/Boost學習
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具