亚洲成人一区在线观看_天堂网www_国产精品久久9_中文在线播放_伊人天天_久久精品久久久精品美女

當(dāng)前位置:首頁 > 網(wǎng)站舊欄目 > 學(xué)習(xí)園地 > 設(shè)計(jì)軟件教程 > Dotmars 實(shí)例之:容器、迭代器與算法框架

Dotmars 實(shí)例之:容器、迭代器與算法框架
2010-01-13 22:50:44  作者:  來源:
這幾天 Mr. Bright 老是不放新版本,圈子里太冷清了,我來發(fā)篇程序湊個(gè)數(shù)。

這是一個(gè)類似 C++ STL 的容器、迭代器和算法框架,迭代器的設(shè)計(jì)參考了 C++ boost 庫中的"new-style" 迭代器,把迭代器的遍歷和讀寫操作分開,內(nèi)置數(shù)組處理參考了 qiezi 的文章: 仿STL的vector,寫了一組array操作方法。容器方法的命令沒有遵循 STL 的風(fēng)格,而是采用 .Net 范型容器的名稱。

借助于 D 威力強(qiáng)大的模板和模板混入,代碼雖然大量用到了模板,但是十分地簡短易讀。

目前僅僅實(shí)現(xiàn)的部分包括:
  • 雙向列表容器
  • find & copy 算法(沒有模板特化的優(yōu)化)
  • 內(nèi)置一維數(shù)組的迭代器
  • 一個(gè)AOP模式的容器操作符重載
廢話少說,看看范例程序展現(xiàn)的威力:

D 代碼
 
  1. module samples.base.collections;
  2.  
  3. import dotmars.base.iterator;
  4. import dotmars.base.collection.list;
  5. import dotmars.base.collection.array;
  6. import dotmars.base.algorithms;
  7. import dotmars.io.console;
  8.  
  9. void main()
  10. {
  11. alias List!(int) MyList;
  12.  
  13. auto list = new MyList;
  14.  
  15. list ~= 1; // this is equal to list.addList(1);
  16. list ~= 2;
  17. list ~= 3;
  18. list ~= 4;
  19. list ~= 5;
  20. list ~= 6;
  21. list.addFirst(7);
  22.  
  23. //現(xiàn)在序列為: 7,1,2,3,4,5,6
  24.  
  25. MyList.Iterator it = list.begin();
  26. ++it;
  27. ++it;
  28.  
  29. //刪除2, it 指向3
  30. it = list.remove(it);
  31.  
  32. //現(xiàn)在序列為: 7,2,3,4,5,6
  33.  
  34. list.addBefore(it, 2); //在3之前插入2,it 指向 3
  35.  
  36.  
  37. int[] array;
  38. array.addLast(8); //內(nèi)置數(shù)組也能享受到同樣的 addLast 成員函數(shù)
  39. array.addLast(9);
  40.  
  41. // 內(nèi)置數(shù)組也可以用迭代器訪問
  42. list.addRangeBefore(it, array.begin(), array.end()); //在3之前插入array的內(nèi)容,即 8,9
  43.  
  44. //使用 foreach 語句遍歷 list
  45. foreach(int i; list)
  46. Console.print("{0}, ", i);
  47.  
  48. Console.newLine();
  49.  
  50. //與 STL 類似,通過內(nèi)部的迭代器反向遍歷 list
  51. for(MyList.ReverseIterator ri = list.rbegin(); ri != list.rend(); ++ri)
  52. Console.print("{0}, ", ri.current);
  53.  
  54. Console.newLine();
  55.  
  56. //調(diào)用通用算法
  57. MyList.Iterator pos = find(list.begin(), list.end(), 5);
  58.  
  59. if(pos != list.end())
  60. Console.printLine("Pattern found: {0}", pos.current);
  61.  
  62. list.clear();
  63. }

運(yùn)行結(jié)果:
  1. 7, 1, 2, 9, 8, 3, 4, 5, 6,
  2. 6, 5, 4, 3, 8, 9, 2, 1, 7,
  3. Pattern found: 5


最新版程序可在 dotmars.googlecode.com/svn/trunk/samples/base/collections.d 處下載。


安徽新華電腦學(xué)校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢
主站蜘蛛池模板: 99日韩| 草草成人 | av国产精品| 欧美成人一区二区 | 久久久久国| 四影虎影ww4hu55.com | 久久www免费人成看片高清 | 国产视频一二三区 | 成人精品一区二区三区中文字幕 | 日韩一级视频 | 99精品欧美一区二区三区 | 九九综合九九综合 | 国产精品成人国产乱一区 | 亚洲成人精品区 | 99国内精品久久久久久久 | 青青久久av北条麻妃海外网 | 日韩在线免费观看av | 91福利视频导航 | 99精品全国免费观看视频软件 | 国产精品美女久久久久久免费 | 亚洲综合视频在线观看 | 欧美亚洲另类丝袜综合网动图 | 日本免费久久 | 91一区二区 | 成人黄色免费 | 久久人人爽爽爽人久久久 | 久久91精品久久久久久9鸭 | 亚洲人成网站999久久久综合 | 亚洲毛片在线 | 日本一区二区三区视频免费看 | 成人无遮挡毛片免费看 | 日韩视频精品在线观看 | 亚洲成人精品在线观看 | 国产高清精品在线 | 欧美日韩黄色一区二区 | 午夜视频在线免费观看 | 97av在线| 亚洲精品美女在线观看 | 成人蜜桃视频 | 成人精品视频在线观看 | 国产精品日韩 |