C 語言版stl: CSTL

來源:互聯網
上載者:User

啥都不說,先上代碼

static void vector_array_test(void){    VECTOR v;    ARRAY a;    int aa[5];int b = 0;        VECTOR_INIT(v, int);    VECTOR_RESIZE(v, 5, int);    ARRAY_INIT(a, 5, int);#define OUT(x) printf("%d\n", x)#define IN(x)  scanf("%d", &x)#define FILL_INCREASE(x) x = ++b#define FILL_DECREASE(x) x = --b    FOR_EACH(VECTOR_BEGIN(v), VECTOR_END(v), VECTOR_ITERATOR, int, FILL_INCREASE);    FOR_EACH(VECTOR_BEGIN(v), VECTOR_END(v), VECTOR_ITERATOR, int, OUT);    FOR_EACH(ARRAY_BEGIN(a), ARRAY_END(a), ARRAY_ITERATOR, int, FILL_DECREASE);    FOR_EACH(ARRAY_BEGIN(a), ARRAY_END(a), ARRAY_ITERATOR, int, OUT);    FOR_EACH(aa, aa + 5, ARRAY_ITERATOR, int, IN);    FOR_EACH(aa, aa + 5, ARRAY_ITERATOR, int, OUT);COPY(aa, aa + 5, ARRAY_ITERATOR, int, VECTOR_BEGIN(v), VECTOR_ITERATOR, int);FOR_EACH(VECTOR_BEGIN(v), VECTOR_END(v), VECTOR_ITERATOR, int, OUT);VECTOR_DESTROY(v);    ARRAY_DESTROY(a);}

是不是感覺有點熟悉啊,呵呵,這就是C語言版STL,容器,迭代器,演算法,函數對象,一個都不少。注意演算法FOR_EACH支援函數,宏,用C++編譯器也支援c++函數對象。而且宏FILL可以訪問up_value,也就是代碼中的局部變數b!這一點徹底超越了c++的stl喲,喜歡函數編程的朋友也許會開心一陣子咯。

不過,這畢竟是C語言,我們不得不在演算法中直接寫下iterator_trait類型,還要把元素類型給寫出來,還請多多包涵,嘿嘿。

當然,那些羅哩羅嗦的流迭代器啊,從此和他們說拜拜吧,鄙人也不想費力不討好的去類比那些屠龍術了。

鄙人已經完成了容器中的數組,向量,雙向鏈表,演算法挑了幾個有代表性的來實現,用於測試容器迭代器迭代效能和各種類型迭代器的適配。完成度少說也有60%左右了吧,先想拿出部分來給大家瞧瞧,看看有啥問題沒。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.