C++Primer 5th Chap10 Generic Algorithms(未完)

Posted hfut-freshguy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++Primer 5th Chap10 Generic Algorithms(未完)相关的知识,希望对你有一定的参考价值。

大多数算法定义在头文件algorithm中,在头文件numeric中定义了数值泛型算法。

以find算法为例:在容器的两个迭代器指定的范围内遍历,查找特定值。

 1 int val=44; 2 auto result=find(ivec.begin(),ivec.end(),val); 3 cout<<result<<endl; 

迭代器令算法不依赖于容器,但算法依赖于元素类型的操作

算法不执行容器的操作,只会执行迭代器的操作

只读算法

  只会读取其范围之内的元素而不会改变元素

  除了find算法之外,例如accumulate算法(定义在numeric头文件中),返回范围内元素之和+指定初值

    cin>>sum;

    accumulate(ivec.cbegin(),ivec.cend(),sum);(如果是string类型,则是将string连接起来)

  对于只读算法,最好选取cbegin和cend作为迭代器

  再举操作两个序列的算法equal为例:(如果两个序列所有对应元素相同,则返回true,否则返回false)

    equal(ivec1.cbegin(),ivec1.cend(),ivec2.cbegin());

  equal算法并不要求两个序列元素类型严格一致,只要能用==比较即可

  基于此例,对于只给出第二个序列的单一迭代器的算法,都假定两序列等长(至少不能比第一个短)

写元素算法

  需要确保容器自身大小至少不小于写入的元素数目(因为算法不能改变容器大小)

    例如:fill(ivec.begin(),ivec.end(),val);将容器每个值赋为val

     fill_n(ivec.begin(),ivec.size(),val);将容器每个值赋为val

      注意:如果对空容器使用fill_n并且指定长度,会引起错误

  back_inserter(定义在iterator头文件)

    为了向容器尾部添加元素而使用的迭代器

     1 vector<int> ivec; 2 auto it =back_inserter(ivec); 3 *it=23; 

    这样在容器的尾部添加了一个元素,值为23

    结合fill_n使用:(添加了10个值为val的元素到ivec)

     1 vector<int> ivec; 2 fill_n(back_inserter(ivec),10,val); 

  拷贝算法:

       1 auto ret=copy(begin(arr1),end(arr1),arr2); 

    这样将arr1序列的值拷贝给arr2(要求arr2至少和arr1等长),返回end(arr2)

    类似copy算法,replace也具备此类替换效果:

     1 replace(ilst.begin(),ilst.end(),search_value,new_value); 

    这样将ilst序列中所有值为search_value的元素赋值为new_value

    如果不想将原序列改变,可以将元素替换后的序列保存在其他容器中:

     1 replace_copy(ilst.begin(),ilst.end(),back_inserter(ivec),search_value,new_value);

    这样借助replace_copy函数和back_inserter将新的ilst保存在ivec中,原本的ilst不变

重排元素算法: 

  

 

以上是关于C++Primer 5th Chap10 Generic Algorithms(未完)的主要内容,如果未能解决你的问题,请参考以下文章

C++Primer 5th Chap9 Sequential Container(未完)

C++ Primer 5th笔记(chap 19 特殊工具与技术)链接指示: extern “C“

C++ Primer 5th笔记(chap 16 模板和泛型编程)重载模板和类型转换

C++ Primer 5th笔记(chap 19 特殊工具与技术)控制内存分配

C++ Primer 5th笔记(chap 19 特殊工具与技术)定位 new 表达式

C++ Primer 5th笔记(chap 19 特殊工具与技术)异常类层次