zoukankan      html  css  js  c++  java
  • STL学习笔记--临时对象的产生与运用

    所谓的临时对象,就是一种无名对象(unnamed objects)。它的出现如果不在程序员的预期之下,往往造成效率上的负担。但有时刻意制造一些临时对象,却又是使程序干净清爽的技巧。刻意制造临时对象的方法是,在型别名称之后直接加一对小括号,并可指定初值,例如shape(3,5)或int(8),其意义相当于调用相应的constructor且不指定对象名称。STL最常将此技巧应用于仿函数(functor)与算法的搭配上,例如:

    #本例测试仿函数用于for_each()的情形
    
    #include <vector>
    #include <algorithm>
    #include <iostream>
    
    using namespace std;
    
    template <typename T>
    class print
    {
        public:
            void operator()(const T& elem)
            { cout << elem << ' '; }
    };
    
    int main()
    {
          int ia[6] = {0, 1, 2, 3, 4, 5 };
          vector<int> iv(ia, ia+6);
          
          // print<int>()是一个临时对象, 不是一个函数调用操作
          for_each(iv.begin(), iv.end(), print<iint>());
        
    //
        cout << endl; }

    最后一行便是产生“class template具现体”print<int>的一个临时对象。这个对象将被传入for_each()之中起作用。当for_each()结束时,这个临时对象也就结束了它的生命。

    ------

    仿函数(functor)的解释:使用起来像函数一样的东西,如果你针对某个class进行operator()重载,它就成了一个仿函数。

    -----

    [yangtze@contex201 ~]$ uname -a
    Linux contex201 3.2.2-1.2 #65 SMP Wed Jul 4 19:49:25 CST 2012 x86_64 x86_64 x86_64 GNU/Linux
    [yangtze@contex201 ~]$ g++ tmp_object.cpp
    [yangtze@contex201 ~]$ ./a.out
    0 1 2 3 4 5
    [yangtze@contex201 ~]$

  • 相关阅读:
    登琴台石有感
    天台之约
    游小九寨有感
    又见白沫江
    大学生创业 提前要做好三项准备
    游十八里香草沟有感
    观响水滩瀑布有感
    创业十把金钥匙,看了非常有启发~(转)
    2009年春季商务人士最关注的经管图书
    有了你,就有了诗意的人生
  • 原文地址:https://www.cnblogs.com/yangtze736-2013-3-6/p/3563734.html
Copyright © 2011-2022 走看看