zoukankan      html  css  js  c++  java
  • 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 返回的迭代器

  • 相关阅读:
    数据分析
    爬虫系统
    数据结构
    OpenStack系列
    python全栈开发之路
    机器学习——线性回归算法
    简单回测框架开发
    量化交易——羊驼交易法则
    量化交易——动量策略vs反转策略
    量化交易——PEG策略
  • 原文地址:https://www.cnblogs.com/kidycharon/p/10034213.html
Copyright © 2011-2022 走看看