【C++ Primer | 07】泛型算法
定制操作
#include <iostream> #include <string> #include <vector> #include <algorithm> #include <numeric> #include <list> using namespace std; template <typename Sequence> inline ostream& println(Sequence const& seq) { for (auto const& elem : seq) cout << elem << " "; cout << endl; return cout; } inline bool is_shorter(std::string const& lhs, std::string const& rhs) { return lhs.size() < rhs.size(); } void elimdups(vector<string> &vs) { sort(vs.begin(), vs.end()); auto new_end = unique(vs.begin(), vs.end()); vs.erase(new_end, vs.end()); } int main() { vector<", "Hi", "alan", "wang" }; elimdups(v); stable_sort(v.begin(), v.end(), is_shorter); cout << "ex10.11 :\n"; println(v); system("pause"); ; }
输出结果:
Exercise 10.14:
int main() { auto sum = [](int a, int b) {return a + b; }; cout << sum(, ) << endl; ; }
Exercise 10.16
#include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; void elimdups(vector<string> &vs) { sort(vs.begin(), vs.end()); for (auto c : vs) cout << c << " "; cout << endl; auto new_end = unique(vs.begin(), vs.end()); vs.erase(new_end, vs.end()); for (auto c : vs) cout << c << " "; cout << endl; } void biggies(vector<string> &vs, size_t sz) { elimdups(vs); stable_sort(vs.begin(), vs.end(), [](string const& lhs, string const& rhs) { return lhs.size() < rhs.size(); }); auto wc = find_if(vs.begin(), vs.end(), [sz](string const& s) { return s.size() >= sz; }); for_each(wc, vs.end(), [](const string &s) { cout << s << " "; }); } int main() { vector<string> v{ ","hi~", "alan", "alan", "cp" }; cout << "ex10.16: " << endl; biggies(v, ); cout << endl; system("pause"); ; }
输出结果:
Exercise 10.18、10.19
#include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; // from ex 10.9 void elimdups(vector<string> &vs) { sort(vs.begin(), vs.end()); auto new_end = unique(vs.begin(), vs.end()); vs.erase(new_end, vs.end()); for (auto it = vs.cbegin(); it != vs.end(); ++it) cout << *it << " "; cout << endl; } // ex10.18 void biggies_partition(vector<string> &vs, size_t sz) { elimdups(vs); auto pivot = partition(vs.begin(), vs.end(), [sz](const string &s) { return s.size() >= sz; } ); for (auto it = vs.cbegin(); it != pivot; ++it) cout << *it << " "; } // ex10.19 void biggies_stable_partition(vector<string> &vs, std::size_t sz) { elimdups(vs); auto pivot = stable_partition(vs.begin(), vs.end(), [sz](const string& s) { return s.size() >= sz; }); for (auto it = vs.cbegin(); it != pivot; ++it) cout << *it << " "; } int main() { // ex10.18 vector<string> v{ "the", "quick", "red", "fox", "jumps", "over", "the", "slow", "red", "turtle" }; cout << "ex10.18: "; vector<string> v1(v); biggies_partition(v1, ); cout << endl; // ex10.19 cout << "ex10.19: "; vector<std::string> v2(v); biggies_stable_partition(v2, ); cout << endl; system("pause"); ; }
输出结果:
参数绑定
Exercise 10.22:
#include <iostream> #include <vector> #include <string> #include <algorithm> #include <functional> using namespace std; using namespace std::placeholders; bool isLesserThanOrEqualTo6(const string &s, string::size_type sz) { return s.size() <= sz; } int main() { vector<string> authors{ "Mooophy", "pezy", "Queequeg90", "shbling", "evan617" }; cout << count_if(authors.cbegin(), authors.cend(), bind(isLesserThanOrEqualTo6, _1, )) << endl; system("pause"); ; }
Exercise 10.24:
#include <iostream> #include <vector> #include <algorithm> #include <functional> using namespace std; using namespace std::placeholders; auto check_size(string const& str, size_t sz) { return str.size() < sz; } int main() { vector<, , , , , , , }; "); auto result = find_if(vec.begin(), vec.end(), bind(check_size, str, _1)); if (result != vec.end()) cout << *result << endl; else cout << "Not found" << endl; system("pause"); ; }
#include <iostream> #include <vector> #include <algorithm> #include <functional> using namespace std; using namespace std::placeholders; auto check_size(string const& str, size_t sz) { return str.size() < sz; } int main() { vector<int> vec{ 0, 1, 2, 3, 4, 5, 6, 7 }; string str("123456"); auto result = find_if(vec.begin(), vec.end(), bind(check_size, str, _1)); if (result != vec.end()) cout << *result << endl; else cout << "Not found" << endl; system("pause"); return 0; }
#include <iostream> #include <vector> #include <algorithm> #include <functional> using namespace std; using namespace std::placeholders; auto check_size(string const& str, size_t sz) { return str.size() < sz; } int main() { vector<int> vec{ 0, 1, 2, 3, 4, 5, 6, 7 }; string str("123456"); auto result = find_if(vec.begin(), vec.end(), bind(check_size, str, _1)); if (result != vec.end()) cout << *result << endl; else cout << "Not found" << endl; system("pause"); return 0; }
【C++ Primer | 07】泛型算法的更多相关文章
- c++ primer 11 泛型算法
使用泛型算法必须包含头文件#inlucde <algorithm> 标准库还定义一组泛化的算术算法,其命名习惯与泛型算法相同,包含头文件#include <numeric> f ...
- C++ Primer : 第十章 : 泛型算法 之 只读、写和排序算法
大多数算法都定义在<algorithm>头文件里,而标准库还在头文件<numeric>里定义了一组数值泛型算法,比如accumulate. ● find算法,算法接受一对迭代 ...
- C++ Primer 5th 第10章 泛型算法
练习10.1:头文件algorithm中定义了一个名为count的函数,它类似find,接受一对迭代器和一个值作为参数.count返回给定值在序列中出现的次数.编写程序,读取int序列存入vector ...
- C++ Primer 读书笔记:第11章 泛型算法
第11章 泛型算法 1.概述 泛型算法依赖于迭代器,而不是依赖容器,需要指定作用的区间,即[开始,结束),表示的区间,如上所示 此外还需要元素是可比的,如果元素本身是不可比的,那么可以自己定义比较函数 ...
- 【足迹C++primer】30、概要(泛型算法)
概要(泛型算法) 大多数算法的头文件中定义algorithm在. 标准库也是第一个文件numeric它定义了一套通用算法. #include<iostream> #include<n ...
- 【C++ Primer | 07】常用算法
第一部分 常用泛型算法: find(beg, end, val); equal(beg1, end1, beg2); fill(beg, end, val); fill_n(beg, cnt, val ...
- [C++ Primer] : 第10章: 泛型算法
概述 泛型算法: 称它们为"算法", 是因为它们实现了一些经典算法的公共接口, 如搜索和排序; 称它们是"泛型的", 是因为它们可以用于不同类型的元素和多种容器 ...
- C++ Primer 学习笔记_45_STL实践与分析(19)--泛型算法的结构
STL实践与分析 --泛型算法的结构 引言: 正如全部的容器都建立在一致的设计模式上一样,算法也具有共同的设计基础. 算法最主要的性质是须要使用的迭代器种类.全部算法都指定了它的每一个迭代器形參可使用 ...
- C++ Primer笔记6_STL之泛型算法
1.泛型算法: 大多数算法定义在头文件algorithm中.标准库还在头文件numeric中定义了一组数值泛型算法 仅仅读算法: 举例: find函数用于找出容器中一个特定的值,有三个參数 int v ...
- C++ 泛型算法
<C++ Primer 4th>读书笔记 标准容器(the standard container)定义了很少的操作.标准库并没有为每种容器类型都定义实现这些操作的成员函数,而是定义了一组泛 ...
随机推荐
- linux 工具学习网站
推荐一个很不错的linux工具学习网站; 对于一个开发人员来说,我觉得掌握这些工具对于基于linux的应用开发来说事半功倍. http://linuxtools-rst.readthedocs.io/ ...
- python set 使用
创建集合set python set类是在python的sets模块中,大家现在使用的python2.7.x中,不需要导入sets模块可以直接创建集合.>>>set('boy')se ...
- 绕过PALOALTO TRAPS EDR解决方案
0x1 技术点 PaloAlto Traps(EDR解决方案)基于行为封锁和标记许多黑客工具. 0x2 绕过方法 最简单的解决方案就是禁用内置实用程序,即; Cytool.Cytool是一个集成命令行 ...
- Linux根文件系统
root :文件系统是文件系统的顶级目录.它必须包含在挂载其它文件系统前需要用来启动 Linux 系统的全部文件.它必须包含需要用来启动剩余文件系统的全部可执行文件和库.文件系统启动以后,所有其他文件 ...
- Windows Server 2008 R2忘记密码导致无法修改密码
其实有个记住密码的工具还是简单的,登陆系统后,CMD输入命令: net user administrator NewPassword 新密码即时生效
- ppp 完全理解(二)【转】
转自:https://blog.csdn.net/tianruxishui/article/details/44057717 ppp 完全理解(二) pppd 协议及代码分析 作者:李圳均 日期:20 ...
- Kafka监控KafkaOffsetMonitor【转】
1.概述 前面给大家介绍了Kafka的背景以及一些应用场景,并附带上演示了Kafka的简单示例.然后,在开发的过程当中,我们会发现一些问题,那就是消息的监控情况.虽然,在启动Kafka的相关服务后,我 ...
- boost.asio包装类st_asio_wrapper开发教程(2013.12.8更新)(二)
如果你是偶然浏览到这里,请先看 源代码及例程下载地址:命令行:svn checkout http://st-asio-wrapper.googlecode.com/svn/trunk/ st-asio ...
- $Django orm增删改字段、建表 ,单表增删改查,Django请求生命周期
1 orm介绍 ORM是什么 ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM. 一 ...
- YUV的数据格式
一.YUV格式分为两大类:planar(平面)和packed(打包).planar格式,先连续存储所有像素点的Y分量,紧接着存储所有像素点的U,随后存储所有像素点的V.packed格式,每个像素点的Y ...