.Net Framework容器與STL的詳細(xì)比較
.Net Framework開發(fā)環(huán)境為程序員們帶來(lái)了非常大的好處。在這里我們就先來(lái)了解一下.Net Framework容器與STL容器之間的比較。從中更進(jìn)一步的對(duì).Net Framework有一個(gè)深入的了解程度。#t#
在.Net Framework容器和STL中有眾多的容器,為編程帶來(lái)了方便,我們就先對(duì)這兩種框架里的容器做了一個(gè)比較。
在STL中,主要有這么幾種:
Vector Deque List Set/Multiset Map/Multimap Stack Queue Bitset
在.Net Framework容器包含在System.Collections里,主要有這么幾種:
ArrayList BitArray Hashtable SortedList Queue Stack
這些結(jié)構(gòu)中,有幾個(gè)是功能類似的,比如Vector和ArrayList,都是可自動(dòng)調(diào)整容量的數(shù)組。Queue和Stack也是相同的。
.Net Framework容器與STL容器不同的有這么幾點(diǎn):
1、.NET沒(méi)有Set和Map,只有Hashtable,而標(biāo)準(zhǔn)C++里是沒(méi)有Hashtable的,只有在具體實(shí)作中,有所涉及,比如說(shuō)SGI STL里。
2、.NET有SortedList,這是Hashtable和Array的混合體,功能強(qiáng)大,可是實(shí)現(xiàn)Dictionary。
3、STL的Bitset是存儲(chǔ)位(bit)或布爾值且大小固定的數(shù)組,用于管理各種標(biāo)志(flags)。
.Net Framework容器的BitArray僅存儲(chǔ)布爾值。
這兩個(gè)的實(shí)現(xiàn)和使用方式不同,但是主要用途卻是類似的,MSDN上的例子和《標(biāo)準(zhǔn)程序庫(kù)》的例子相當(dāng)雷同。
關(guān)于容器的訪問(wèn)方式
有了容器,就必須去訪問(wèn),才能運(yùn)用。兩者的訪問(wèn)原理類似,都是用一種特殊的對(duì)象去訪問(wèn)。
⑴STL方式:使用迭代器(iterator),迭代器有許多種,每種容器都有自己的迭代器。但是使用迭代器的方式卻是相同的,這使得我們使用容器相當(dāng)方便。
迭代器行為上類似于指針,內(nèi)部封裝了對(duì)不同容器的操作。對(duì)我們隱藏了容器內(nèi)部復(fù)雜的結(jié)構(gòu)。
⑵.NET的方式頗為不同。類庫(kù)中有一個(gè)名為IEnumerable的接口,所有容器類都繼承實(shí)現(xiàn)了這個(gè)接口。它有一個(gè)公共方法:GetEnumerator()。因此所有容器都有這個(gè)方法,它返回可用于循環(huán)訪問(wèn)集合的IEnumerator,這個(gè)IEnumerator類似于STL的迭代器。
使用實(shí)例:
- using System;
- using System.Collections;
- public class ArrayListTest
- {
- public static void Main()
- {
- ArrayList alist=new ArrayList();
- alist.Add(1);
- alist.Add(2);
- alist.Add(3);
- print(alist);
- }
- public static void print
(IEnumerable myList)- {
- System.Collections.IEnumerator
myEnum=myList.GetEnumerator();- while(myEnum.MoveNext())
- {
- Console.WriteLine(myEnum.Current);
- }
- }
- }
綜合起來(lái)看,.Net Framework容器和STL的容器類型相當(dāng)齊全,都涉及了方方面面,只有細(xì)微差別。訪問(wèn)方式從本質(zhì)上說(shuō)也是一致的。