zoukankan      html  css  js  c++  java
  • c++中的stl和泛型

      c++是一门多范式的语言,其中就包括泛型,泛型有可以细分为泛型方法和泛型类。无处不在的stl,就是泛型最经典的应用场景。c++泛型的实现原理就是在调用时传入真正的类型。其泛型相比于java,本人感觉不太好用,定义命名时也有些冗余,先上代码。  

    //记住这些经典的代码,它可以让你理解语言
    //但是c++的参数类型使泛型也变的有点难了,比如max(12,13),max(i,j)等
    template <typename T> T max(T a,T b){ if(a>b){ return a} else{ return b;
      } } // 可以看到,虽然理论上T可以是任意类型,但是其必须支持比较操作>,c++没有对类型进行限定,但并不是传人任意类型就可以的。

      stl中还有一个非常重要的概念:迭代器,其目的就是为操作容器中的元素。数组指针就是一个经典的迭代器。

    //这是一个泛型的常量前向迭代器,可以改变容器中元素大值,可读可写
    template <typename T> struct list_iterator { list_iterator(list_entry<T> *entry):entry(entry){ } T& operator*(){ cout<<"the T& has been used"<<endl; return entry->value; } //常量对象调用 const T& operator*() const{ cout<<"the const T& has been used"<<endl; return entry->value; } // it.operator++(),使用int来区分前缀和后缀 list_iterator<T>& operator++(int){ entry= entry->next;
         //this是指针,*this返回了对象 return *this; } // !=重载这个符号, 返回为bool,while,if等判断条件。 bool operator!=(list_iterator<T> other){ //成员指针是否指向同一个地址 if(other.entry== entry){ return false; }else{ return true; } } list_entry<T> * entry; };

      其vector,list,set,map和java中的容器有异曲同工之妙,不同之处在于java中容器提供的接口更统一,方法更多,还有很多工具类,反之,c++就比较简陋了,但是其可以基本类型为泛型参数,写起来更简洁一些。看一些c++中stl的经典写法。

    int a = {2,32,32,90};
    vector<int> vt (a,a+4); // 数组转换为vector。
    set<int> s(v.begin(),v.end()) ; // vector转换为set
    bool flag=s.insert(value).second; // set会返回添加是否成功
    map<int,int> m; // 可以用来对整数计数.
    m[n] ++;
    

      

  • 相关阅读:
    SuperMap房产测绘成果管理平台
    SuperMap产权登记管理平台
    Android adb shell am 的用法(1)
    由浅入深谈Perl中的排序
    Android 内存监测和分析工具
    Android 网络通信
    adb server is out of date. killing...
    引导页使用ViewPager遇到OutofMemoryError的解决方案
    adb logcat 详解
    How to send mail by java mail in Android uiautomator testing?
  • 原文地址:https://www.cnblogs.com/Robin008/p/12227168.html
Copyright © 2011-2022 走看看