第十章 知识点总结

10.1  概述 

    标准库定义了一组泛型算法,因为他们实现了一些经典算法的公共接口,如排序和搜索。称它们为泛型的,是因为它们可以用于不同的类型的元素和多种容器类型。

10.2  初识泛型算法

        10.2.1  只读算法

        accumulate(v.begin(),v.end(),0)

        该算法接受三个参数,前两个指出需要求和的范围。第三个为和的初值。

        equal(v.begin(),v.end(),v2.begin())

        该算法用于确定两个序列是否保存相同的值。前两个参数为第一个序列的元素范围,第三个参数为第二个序列的首元素。

      10.2.2 写容器算法

       fill(v.begin(),v.end(),0)

       fill_n(dest,n,val)

       back_insert

      插入迭代器,

      fill_n(back_insert(vec),10,n)

      拷贝算法

      copy(begin(a1),end(a1),a2)

      前两个参数为迭代器范围,第三个表示目标序列起始位置。

     replace(v.begin(),v.end(),0,42)

     前两个参数为迭代器范围,后两个一个是搜索的值,一个是新值。

   10.2.3  重排容器算法

     sort(v.begin(),v.end())

     排序

    unique()

   消除重复元素,返回一个指向不重复值范围末尾的迭代器。并没有删除元素。元素位置仍有元素存在,但不知是什么。

10.3  定制操作

    谓词,是一个可调用的表达式。其返回结果是一个能用做条件的值。

    10.3.1  向算法传递函数

    

bool isShorter(const string &s1,const string &s2)
{
return s1.size()<s2.size();
}
//重写排序算法,向算法传递函数
sort(word.begin(),word.end(),isShorter)

   10.3.2  lambda 表达式

     根据算法接受一元谓词还是二元谓词,我们传递给算法的谓词必须严格接受一个或者两个参数。有时需要更多参数。

     一个lambda表达式表示一个可调用的代码单元,可以将其理解为一个未命名的内联函数。

     

stable_sort(word.begin(),word.end(),
               [](const string &s1,const string &s2){return s1.size()<s2.size()})

    使用捕获列表

[sz](const string &s1){return s1.size()<sz}

10.3.4 参数绑定

    bind(函数名,arg_list)

    

//例程
auto g=bind(f,a,b,_2,c,_1)
//生成一个新的可调用,他有两个参数,分别用占位符,_2,_1表示。这个新的可调用对象将他自己的参数作为第三个第五个参数传递给f,f的第一个,第二个,第四个参数分别绑定到给定的值a\b\c上。
调用g(X,Y)
实际为
f(a,b,Y,c,X)

 

 

知识点:反向迭代器

            vec.crbegin();

指向容器最后一个元素。

vec.crend();

指向容器首元素之前的一个迭代器。

反向迭代器操作string会使其倒序,可使用成员函数base(),使其返回对应的普通迭代器。

 

posted @ 2018-04-29 10:24  吾之求索  阅读(123)  评论(0)    收藏  举报