c++中的stl和泛型

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//这是一个泛型的常量前向迭代器,可以改变容器中元素大值,可读可写<br>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;<br>     //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的经典写法。

1
2
3
4
5
6
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] ++;

  

 

posted @   懂得了才能做一些改变  阅读(912)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示