• More Effective C++精简版(4)


    6.1
          
    尽可能多的数据profile你的软件。此外,你必须确保每组数据在客户(或至少是最重要的客户)如何使用软件的方面能有代表性。

    6.2
            因为需要存储两个值之间的依赖关系,维护存储值、依赖关系或上述两者,重载操作符例如赋值符、拷贝操作和加法操作,所以lazy evaluation在数字领域应用得很多。另一方面运行程序时它经常节省大量的时间和空间。

            避免不需要的对象拷贝,通过使用operator[]区分出读操作,避免不需要的数据库读取操作,避免不需要的数字操作。但是它并不总是有用。就好象如果你的父母总是来检查你的房间,那么拖延整理房间将不会减少你的工作量。实际上,如果你的计算都是重要的,lazy evaluation可能会减慢速度并增加内存的使用,因为除了进行所有的计算以外,你还必须维护数据结构让lazy evaluation尽可能地在第一时间运行。在某些情况下要求软件进行原来可以避免的计算,这时lazy evaluation才是有用的。

    6.3
             over-eager evaluation(过度热情计算法):在要求你做某些事情以前就完成它们

             如果你认为一个计算需要频繁进行,你就可以设计一个数据结构高效地处理这些计算需求,这样可以降低每次计算需求时的开销

             采用over-eager最简单的方法就是caching(缓存)那些已经被计算出来而以后还有可能需要的值。

    template<class T>

    T&DynArray<T>::operator[](int index)

    {

     if (index < 0) {

        throw an exception;                     // 负数索引仍不合法

     }

     if (index >当前最大的索引值) {

        调用new分配足够的额外内存,以使得

       索引合法;

     }

     返回index位置上的数组元素;

    }
     

    6.4

    仅仅需要一小段时间的变量称为临时变量

    C++语言禁止为非常量引用(reference-to-non-const)产生临时对象

    void uppercasify(const string& str);

    在任何时候只要见到常量引用(reference-to-const)参数,就存在建立临时对象而绑定在参数上的可能性。在任何时候只要见到函数返回对象,就会有一个临时对象被建立(以后被释放)。

  • 相关阅读:
    大学那点破事
    我是计算机专业的学生
    acm 血泪教训
    汉诺塔问题(竟然还与Sierpiński三角形分形有关)
    证明:log(n!)与nlogn是等价无穷大
    priority_queue POJ 3253 Fence Repair
    插入排序之直接插入排序
    对Huffman编码的思考,熵
    Sudan Function
    给力小程序
  • 原文地址:https://www.cnblogs.com/ethan/p/675118.html
Copyright © 2020-2023  润新知