STL与.Net泛型类的比较
2016-04-11 17:41
141 查看
原文地址:http://blog.sina.com.cn/s/blog_4ed027020100be17.html
容器
.NetFramework有一个System.Collections.Generic命名空间,里面有一些常用的泛型类(数据结构),跟STL的容器很相似,MSDN上写得很乱,搞了一晚上,终于清楚了两者的对应关系。
其中,STL的关联容器(set,map,hashset,hashmap)都有对应的multi容器,但.Net没有,.Net只有通过自定义Comparor(比较算子)实现。
算法(函数模板)
STL的算法相对于.Net来说要丰富的多,STL的所有算法见本人文章《STL函数模板(即算法)一览》,相比之下,.Net只提供查找、替换、插入、删除、复制、最值、排序、反转、计数、累加、集合运算等等比较常见的算法。
STL的算法大多都是通用算法,STL用迭代器把容器与通用算法联系起来,而.Net不用迭代器,.Net所有的算法都是容器的成员函数,这样使得.Net的算法更加安全,但是却不如STL灵活。
函数对象
STL有许多现成的函数对象,而.Net几乎没有,.Net的函数对象基本上都要自己实现。但是这不代表.Net在这方面不如STL,事实上是.Net不需要现成的函数对象,因为.Net有Lambda表达式,可以说,.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)
容器
.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的算法相对于.Net来说要丰富的多,STL的所有算法见本人文章《STL函数模板(即算法)一览》,相比之下,.Net只提供查找、替换、插入、删除、复制、最值、排序、反转、计数、累加、集合运算等等比较常见的算法。
STL的算法大多都是通用算法,STL用迭代器把容器与通用算法联系起来,而.Net不用迭代器,.Net所有的算法都是容器的成员函数,这样使得.Net的算法更加安全,但是却不如STL灵活。
函数对象
STL有许多现成的函数对象,而.Net几乎没有,.Net的函数对象基本上都要自己实现。但是这不代表.Net在这方面不如STL,事实上是.Net不需要现成的函数对象,因为.Net有Lambda表达式,可以说,.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)
相关文章推荐
- lintcode: Distinct Subsequences
- eclipse之web开发【servlet】
- 堆和栈的区别(转过无数次的文章)
- 慕课linux学习笔记(四)常用命令(1)
- Orcale用户管理
- flex学习进度3
- c++实验3-个人所得税计算器
- c++快速简易入门教程_006继承
- 个性化推荐系统方向简单介绍
- 如何计算UDP/TCP检验和checksum
- int *p[3]和int (*p)[3] 的区别,举例说明
- cpptest 的安装和破解
- JVM 基础知识
- 堆和栈的区别是啥?
- iOS开发:深入理解GCD 第二篇(dispatch_group、dispatch_barrier、基于线程安全的多读单写)
- spring环境搭建需要的插件-------Spring Tool Suite™ Downloads
- git 指定从其他分支拉取commit
- 已知三点坐标求外接圆方程和RANSAC算法的介绍,用C语言实现,其使用随机抽样一致性算法来求最合适圆时使用
- iOS UITableViewCell重用问题
- jQuery offset,position,offsetParent,scrollLeft,scrollTop html控件定位 css position