• Effective_STL 学习笔记(三十) 确保目标区间足够大


    算法章:

    1. 演示一些比较少见的算法使你的生活变得简单

    2. 演示怎么避免算法常见的问题

    STL 容器插入对象会出现的问题:

    1   int transmogrify( int x );  // 这个函数从 x 产生一些新值
    2   vector<int> values;
    3   . . .              // 把数据放到 values
    4   vector<int> results;  
    5   transform( values.begin(), values.end(), results.end(), transmogrify ); 
    6    // 把transmogrify应用于 values 中的每个对象,把这个返回的 values 附加到 results

    出现的问题:transform 被告知它的目的区间是从 results.end() 开始的,

    而 *results.end() 没有对象,所以不存在对象的赋值

    把 transform 的结果放入叫作 results 容器的结尾的方式是调用 back_insert 来指定目标区间起点的迭代器

    1   vector<int> results;
    2   transform( values.begin(), values.end(), back_inserter(results), transmogrify );

    back_inserter 返回的迭代器会调用 push_back(任何标准序列容器:vector、string、deque和list)

    front_inserter 利用了 push_front(deque 和 list),在容器的前端插入

    inserter 允许在容器的任意位置插入

    1   inserter( results, results.begin() + result.size() / 2 );

    无论何时使用一个要求指定目的区间的算法,确保目的区间已经足够大或者在算法执行时可以增加大小。

    如果选择增加大小,就使用插入迭代器

    比如 ostream_iterator 或从 back_inserter、front_inserter 或 inserter 返回的迭代器

  • 相关阅读:
    IsPostBack
    多次点击Button后DropDownList选中的值变为默认值?
    数据表数据的复制
    使用DriverManager获取数据库连接
    通过Driver获取数据库连接
    URL学习笔记
    使用UDP进行数据发送的实例一
    利用Socket 客户端---->服务端 传送文件到指定路径,并返回一个友好的回馈
    关于TCP的两个小练习_第一个博客~
    oracle-19c-单实例安装-一键式脚本
  • 原文地址:https://www.cnblogs.com/kidycharon/p/10034213.html
Copyright © 2020-2023  润新知