C 學習之容器學習

2021-07-11 17:58:23 字數 2356 閱讀 3734

集合類的容器全部在 system.collections 名字空間下,c# 2.0 由於增添了對泛型程式設計的支援,它又新增了乙個名字空間 system.collections.generic,存放所有支援泛型的各種集合類的容器。

非泛型類容器:實現好的容器有:arraylist,bitarray,hashtable,queue,sortedlist,stack

支援泛型的集合類容器有dictionary,linkedlist,list,queue,sorteddictionary,sortedlist,stack。

使用非泛型帶來了如下問題:

第乙個問題是,使用

system.collections,和system.collections.specialized下的類導致低效能的**,特別是在值型別時,clr必須執行大量的記憶體轉換操作,這會降低執行時的執行速度。

第二個問題,這些經典的集合類不是執行緒安全的,因為他們是為了操作

system.object類而開發的,因此可以包含任何型別。

由於以上兩個問題,

.net 2.0引入了一些全新的集合類,他們打包在system.collections.generic命名空間中。任何使用.net 2.0版本以上的專案都應該放棄舊的非泛型集合類,而應該使用泛型類。

dictionary是乙個泛型

他本身有集合的功能有時候可以把它看成陣列

他的結構是這樣的:dictionary<[key], [value]>

他的特點是存入物件是需要與[key]值一一對應的存入該泛型,過某乙個一定的[key]去找到對應的值

提供快速的基於鍵值的元素查詢,具體使用方法參考鏈結

dictionary詳細介紹使用方法

linkedlist是雙向鍊錶列表。所謂雙向鍊錶列表就是這樣節點鏈條,每個節點都包含前乙個節點引用,後乙個節點引用,以及自己的引用。它最大的益處就是可以高效地插入元素到列表的任意位置

list是陣列鍊錶

linkedlist是指標鍊錶

選擇list還是linkedlist要看你的使用特點:

陣列鍊錶訪問快,複雜度o(1),但是新增刪除複雜度o(n)

指標鍊錶訪問複雜度是o(n),但是新增刪除很快o(1)

using system;

using system.collections.generic;

using system.diagnostics;

命名空間 包含了能夠與系統程序 事件日誌 和效能計數器進行互動的類

//一般用於幫助診斷和除錯應用程式

//查考鏈結

//if (dt.containskey("id1111"))

//", entry);

// wt.stop();

//}dictionary排序

//list> dtsort = new list>(dt);

keyvaluepairdt2)

// );

linkedlist

//linkedlistmylist = new linkedlist();

//for (int i = 0; i < 10000000; i++)

//查詢

"id1111 = ", mylist.find("id1111").value);

//list

listmylist2 = new list();

//新增資料

for (int i = 0; i < 10; i++)

//刪除資料

mylist2.removeat(7);

//修改資料

mylist2[3] = 121;

//遍歷輸出

for(int i = 0;i < mylist2.count;i++)

,", mylist2[i]);

}console.writeline(" ");

//排序

mylist2.sort(delegate(int a,int b) );

//遍歷輸出

foreach (int item in mylist2)

,", item);

}console.readkey();}}

}

queue和queue是先進先出(fifo)的資料結構,通過enqueue和dequeue方法實現新增元素到佇列的尾部和從佇列的頭部移除元素。peek方法從佇列的頭部獲取乙個元素(不移除該元素),count屬性用來統計佇列中元素的個數(在執行出列操作時檢查元素是否存在非常有用)。

儘管佇列是可遍歷的,但是它們並沒有實現ilist介面和ilist介面,因此也不能通過索引來訪問佇列中的元素。雖然也提供了toarray方法,但是在複製元素時是從佇列中隨機讀取的。

C 學習筆記之容器

list 和 vector 2者都屬於容器,但list只有雙向迭代器,而vector卻有隨機訪問迭代器 迭代器的種類 前向迭代器 forward iterator 可對迭代器進行 操作雙向迭代器 bidirectional iterator 可對迭代器進行 和 操作隨機訪問迭代器 random ac...

c 學習之容器 erase 函式

先介紹erase 函式的用法,erase 函式用於在順序型容器中刪除容器的乙個元素,有兩種函式原型,c.erase p c.erase b,e 第乙個刪除迭代器p所指向的元素,第二個刪除迭代器b,e所標記的範圍內的元素,c為容器物件,返回值都是乙個迭代器,該迭代器指向被刪除元素後面的元素 這個是重點...

C 學習隨筆之向量容器vector

1.動態陣列,可以在執行階段設定長度 2.具有陣列的快速索引方式 3.可以插入和刪除元素 使用vector的時候要包含 includevector verdouble for int i 0 i vecdouble.size i vector iterator it for it vecdouble...