<source id="4vppl"><ins id="4vppl"></ins></source>
<u id="4vppl"><sub id="4vppl"><label id="4vppl"></label></sub></u>
<object id="4vppl"></object>
  • <u id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></u>

    <object id="4vppl"></object>
    <b id="4vppl"><sub id="4vppl"><tr id="4vppl"></tr></sub></b>

      <i id="4vppl"><thead id="4vppl"></thead></i>

      <thead id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></thead>

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

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

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

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

      目前僅僅實(shí)現(xiàn)的部分包括:
      • 雙向列表容器
      • find & copy 算法(沒(méi)有模板特化的優(yōu)化)
      • 內(nèi)置一維數(shù)組的迭代器
      • 一個(gè)AOP模式的容器操作符重載
      廢話少說(shuō),看看范例程序展現(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ù)組也可以用迭代器訪問(wèn)
      42. list.addRangeBefore(it, array.begin(), array.end()); //在3之前插入array的內(nèi)容,即 8,9
      43.  
      44. //使用 foreach 語(yǔ)句遍歷 list
      45. foreach(int i; list)
      46. Console.print("{0}, ", i);
      47.  
      48. Console.newLine();
      49.  
      50. //與 STL 類似,通過(guò)內(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ī)劃師為你提供更多幫助【在線咨詢
      国产午夜福三级在线播放_亚洲精品成a人片在线观看_亚洲自慰一区二区三区_久久棈精品久久久久久噜噜
      <source id="4vppl"><ins id="4vppl"></ins></source>
      <u id="4vppl"><sub id="4vppl"><label id="4vppl"></label></sub></u>
      <object id="4vppl"></object>
    1. <u id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></u>

      <object id="4vppl"></object>
      <b id="4vppl"><sub id="4vppl"><tr id="4vppl"></tr></sub></b>

        <i id="4vppl"><thead id="4vppl"></thead></i>

        <thead id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></thead>
        亚洲A级片电影亚 | 日本精品第一视频在线 | 亚洲一级黄不卡在线播放放 | 中文字幕一区二区吉泽明步 | 中文字幕精品一区在线不卡 | 亚洲欧美国产国产一区二区 |