定制操作


 #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】泛型算法的更多相关文章

  1. c++ primer 11 泛型算法

    使用泛型算法必须包含头文件#inlucde <algorithm> 标准库还定义一组泛化的算术算法,其命名习惯与泛型算法相同,包含头文件#include <numeric> f ...

  2. C++ Primer : 第十章 : 泛型算法 之 只读、写和排序算法

    大多数算法都定义在<algorithm>头文件里,而标准库还在头文件<numeric>里定义了一组数值泛型算法,比如accumulate. ●  find算法,算法接受一对迭代 ...

  3. C++ Primer 5th 第10章 泛型算法

    练习10.1:头文件algorithm中定义了一个名为count的函数,它类似find,接受一对迭代器和一个值作为参数.count返回给定值在序列中出现的次数.编写程序,读取int序列存入vector ...

  4. C++ Primer 读书笔记:第11章 泛型算法

    第11章 泛型算法 1.概述 泛型算法依赖于迭代器,而不是依赖容器,需要指定作用的区间,即[开始,结束),表示的区间,如上所示 此外还需要元素是可比的,如果元素本身是不可比的,那么可以自己定义比较函数 ...

  5. 【足迹C++primer】30、概要(泛型算法)

    概要(泛型算法) 大多数算法的头文件中定义algorithm在. 标准库也是第一个文件numeric它定义了一套通用算法. #include<iostream> #include<n ...

  6. 【C++ Primer | 07】常用算法

    第一部分 常用泛型算法: find(beg, end, val); equal(beg1, end1, beg2); fill(beg, end, val); fill_n(beg, cnt, val ...

  7. [C++ Primer] : 第10章: 泛型算法

    概述 泛型算法: 称它们为"算法", 是因为它们实现了一些经典算法的公共接口, 如搜索和排序; 称它们是"泛型的", 是因为它们可以用于不同类型的元素和多种容器 ...

  8. C++ Primer 学习笔记_45_STL实践与分析(19)--泛型算法的结构

    STL实践与分析 --泛型算法的结构 引言: 正如全部的容器都建立在一致的设计模式上一样,算法也具有共同的设计基础. 算法最主要的性质是须要使用的迭代器种类.全部算法都指定了它的每一个迭代器形參可使用 ...

  9. C++ Primer笔记6_STL之泛型算法

    1.泛型算法: 大多数算法定义在头文件algorithm中.标准库还在头文件numeric中定义了一组数值泛型算法 仅仅读算法: 举例: find函数用于找出容器中一个特定的值,有三个參数 int v ...

  10. C++ 泛型算法

    <C++ Primer 4th>读书笔记 标准容器(the standard container)定义了很少的操作.标准库并没有为每种容器类型都定义实现这些操作的成员函数,而是定义了一组泛 ...

随机推荐

  1. CF1096E The Top Scorer

    题目地址:洛谷CF1096E 本场AC数最少 (最难) 的题目 题目大意:给出三个数p , s,r,表示有p人,每个人都有一个非负得分,所有人的得分和为s,Hasan的得分至少为r,求Hasan是第一 ...

  2. 【VMware vSphere】Veeam备份

    前言 刚刚整理自己的Onenote笔记,发现有一篇笔记没有整理到博客上面来.因为没有许可证书,所以最后也没有成功,但是还是写在这里吧,万一哪儿天有了许可证书就又可以做试验了~ Veeam Backup ...

  3. Python-字符串的常用操作

    name = "my name is irving and i am 22 years old!" #开头字母大写 print(name.capitalize()) #统计某字符个 ...

  4. Ubuntu的内核转储工具【转】

    转自:http://www.cnblogs.com/wwang/archive/2010/11/19/1881304.html 在我的上一篇博文<Linux内核的Oops>的最后介绍到一个 ...

  5. ES6学习笔记三(proxy和reflect)

    proxy用法 // 代理 { let obj={ time:'2017-03-11', name:'net', _r: }; let monitor=new Proxy(obj,{ // 拦截对象属 ...

  6. javascript高级程序语言学习笔记

    1.加法操作符(+)的用法 第一种情况,如果两个操作符都是数值,执行常规的加法计算. 第二种情况,如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来. 第三种情况,只有一个操作数是字符串 ...

  7. CDHtmlDialog探索----Javascript与窗体交互

    CDHtmlDialog提供了C++与网页的双向交互,通此一系统简单的宏调用可以把网页中各元素的事件直接映射到C++程序中,而在网页中调用C++功能代码就显的不那么直观了.归根结底交互的基理就是实现相 ...

  8. cocos开发学习记录

    场景的创建和切换 https://blog.csdn.net/lin453701006/article/details/56334578

  9. CORS(Cross-origin resource sharing) “跨域资源共享”

    CORS与JSONP的比较 在出现CORS标准之前, 我们还只能通过jsonp的形式去向“跨源”服务器去发送 XMLHttpRequest 请求,这种方式吃力不讨好,在请求方与接收方都需要做处理,而且 ...

  10. 【转】C++标准转换运算符const_cast

    const_cast转换符是用来移除变量的const或volatile限定符. 对于const变量,我们不能修改它的值,这是这个限定符最直接的表现.但是我们就是想违背它的限定希望修改其内容怎么办呢? ...