STL与.Net泛型类的比较

原文地址:http://blog.sina.com.cn/s/blog_4ed027020100be17.html


容器 

.NetFramework有一个System.Collections.Generic命名空间,里面有一些常用的泛型类(数据结构),跟STL的容器很相似,MSDN上写得很乱,搞了一晚上,终于清楚了两者的对应关系。

 

名称

STL

.Net

动态数组

vector

List

双向队列

deque

队列

queue

Queue

stack

Stack

带优先级的队列

priority_queue

双向链表

list

LinkedList

单向链表

slist

平衡二叉树

set

带键/值对的平衡二叉树

map

SortedDictionary

哈希表

hashset

Hashset

带键/值对的哈希表

hashmap

Dictionary

带键/值对,有序的动态数组

SortedList

线程安全集合

SynchronizedCollection

 

其中,STL的关联容器(setmaphashsethashmap)都有对应的multi容器,但.Net没有,.Net只有通过自定义Comparor(比较算子)实现。

 

算法(函数模板)

 

STL的算法相对于.Net来说要丰富的多,STL的所有算法见本人文章《STL函数模板(即算法)一览》,相比之下,.Net只提供查找、替换、插入、删除、复制、最值、排序、反转、计数、累加、集合运算等等比较常见的算法。

STL的算法大多都是通用算法,STL用迭代器把容器与通用算法联系起来,而.Net不用迭代器,.Net所有的算法都是容器的成员函数,这样使得.Net的算法更加安全,但是却不如STL灵活。

 

函数对象

 

STL有许多现成的函数对象,而.Net几乎没有,.Net的函数对象基本上都要自己实现。但是这不代表.Net在这方面不如STL,事实上是.Net不需要现成的函数对象,因为.NetLambda表达式,可以说,.Net一个Lambda表达式可以顶STL那一大堆函数对象,而且功能比那一大堆函数对象更为强大、灵活、直观。什么less<>logical_and<>binder1st<>……通通都不用管它,只要一个Lambda表达式就够了。举个例子,数一个容器里所有小于10的数的个数,STL中可能要这么写:

count_if(v.begin(),v.end(),bind2nd(less<int>,10));

C#只要这样写:

v.Count((a)=>a<10);

VB中要这样写:

v.Count(Function(a)a<10)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值