chapter6_使用库算法

  1. 容器、迭代器、算法,都使用了一致的接口协定

  2. 库算法主要在<algorithm>头文件中

  3. copy算法

    1. copy(begin, end, out);

      把区间[begin, end)的所有元素复制到一连串从out开始的元素中

    2. 正确的用法示例是

       std::copy(bottom.begin(), bottom.end(), std::back_inserter(ret));
      

      back_inserter会返回容器的迭代器适配器,当它被用作目的地时,会向容器末端添加数值(扩容)

      错误的示例是

       std::copy(bottom.begin(), bottom.end(), ret.end());
      

      因为copy只复制,不扩容,所以copy无法在end处赋值一个元素,因为end已经是未扩容前的边界了。而back_inserter可以先扩容,提供copy的空间

  4. 被声明为static的局部变量具有全局寿命,在随后的函数调用中将使用第一次调用所构造的对象

    如果程序从这个作用域退出,那么这个变量会保留它的值直到程序下一次进入这个作用域

    扫描二维码关注公众号,回复: 14317397 查看本文章
  5. string 和容器类似,也有迭代器、各种接口方法

  6. 各种有用的库算法

    1. accumulate(b, e, t) – 在 <numeric>中定义

      把区间 [b, e) 中的元素的综合加上t以后输出

    2. 在 [b, e) 中查找特定值的算法

      (1) find(b, e, t)

      查找值t

      (2) find_if(b, e, p)

      根据谓词p查找

      (3) search(b, e, b2, e2)

      查找由 [b2, e2) 指示的序列

    3. 把 [b, e) 所指示的序列复制到由d指示的目的地中

      (1) copy(b, e, d)

      复制整个序列

      (2) remove_copy(b, e, d, t)

      复制所有不等于t的元素

      (3) remove_copy_if(b, e, d, p)

      复制所有使得p为假的元素

    4. 重新排列容器 [b, e) 的区间

      (1) remove_if(b, e, p)

      排列容器,使得[b, e)区间内使得谓词p为假的元素位于这个域的头部,返回一个迭代器,指示位于那些不被删除的元素之后的那个位置

      (2) remove(b, e, t)

      和remove_if类似,但是检查的是哪些元素值不等于t

    5. transform(b, e, d, f)

    对 [b, e) 的元素运行函数 f,把f的结果存储在d指示的目的地中

    1. 对 [b, e) 区间进行划分

      (1) partition(b, e, p)

      根据谓词p,将为真的元素放在头部,为假的元素放在尾部,迭代器指示第一个为假的元素

      (2) stable_partiton(b, e, p)

      和partition类似,但是会让每一个区域内的元素的输入顺序保持不变

    2. equal(b, e, b2)

      第一个序列[b, e),第二个序列从b2开始,比较相同长度下(所以不需要e2参数)的两个序列是否相同

    3. (1) isalnum

      (2) isspace

      (3) isalpha

  7. 算法作用于容器的元素,而不是作用于容器

    sort, remove_if, partition都会把基本容器中的元素移动到新的位置,但是它们没有改变容器本身的特性;

    真正作用于容器的是容器本身的成员,例如erase, insert。

    区别就是,算法是 std::sort( , , ,),而成员方法是 v.erase( , , )。

  8. 迭代器适配器

    都在 <iterator> 头文件中定义

    1. back_inserter(container)

      给容器尾添加元素,容器要支持 push_back 操作

    2. front_inserter(container)

      给容器头添加元素,容器要支持 push_front 操作

    3. inserter(container, iter)

      在迭代器 iter 前添加元素

猜你喜欢

转载自blog.csdn.net/captxb/article/details/103044434
今日推荐