• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            從非GP到GP

            第一個代碼是沒有STL時候的代碼:
            //?name:example2_1.cpp
            //?alias:Rubish

            #include?
            <stdlib.h>
            #include?
            <iostream.h>

            int?compare(const?void?*arg1,?const?void?*arg2);

            void?main(void)
            {
            ????
            const?int?max_size?=?10;????????//?數組允許元素的最大個數
            ????int?num[max_size];????????????//?整型數組

            ????
            //?從標準輸入設備讀入整數,同時累計輸入個數,
            ????
            //?直到輸入的是非整型數據為止
            ????int?n;
            ????
            for?(n?=?0;?cin?>>?num[n];?n?++);

            ????
            //?C標準庫中的快速排序(quick-sort)函數
            ????qsort(num,?n,?sizeof(int),?compare);

            ????
            //?將排序結果輸出到標準輸出設備
            ????for?(int?i?=?0;?i?<?n;?i?++)
            ????????cout?
            <<?num[i]?<<?"\n";
            }


            //?比較兩個數的大小,
            //?如果*(int?*)arg1比*(int?*)arg2小,則返回-1
            //?如果*(int?*)arg1比*(int?*)arg2大,則返回1
            //?如果*(int?*)arg1等于*(int?*)arg2,則返回0
            int?compare(const?void?*arg1,?const?void?*arg2)
            {
            ????
            return????(*(int?*)arg1?<?*(int?*)arg2)???-1?:
            ????????????(
            *(int?*)arg1?>?*(int?*)arg2)???1?:?0;
            }


            如果要考慮到健壯性,可以有以下方案:
            • 采用大容量的靜態數組分配。
            • 限定輸入的數據個數。
            • 采用動態內存分配。

            第一種方案比較簡單,你所做的只是將max_size改大一點,比如:1000或者10000。但是,嚴格講這并不能最終解決問題,隱患仍然存在。假如有人足夠耐心,還是可以使你的這個經過糾正后的程序崩潰的。此外,分配一個大數組,通常是在浪費空間,因為大多數情況下,數組中的一部分空間并沒有被利用。

            再來看看第二種方案,通過在第一個for循環中加入一個限定條件,可以使問題得到解決。比如:for (int n = 0; cin >> num[n] && n < max_size; n ++); 但是這個方案同樣不甚理想,盡管不會使程序崩潰,但失去了靈活性,你無法輸入更多的數。

            看來只有選擇第三種方案了。是的,你可以利用指針,以及動態內存分配妥善的解決上述問題,并且使程序具有良好的靈活性。這需要用到new,delete操作符,或者古老的malloc(),realloc()和free()函數。但是為此,你將犧牲程序的簡潔性,使程序代碼陡增,代碼的處理邏輯也不再像原先看起來那么清晰了。一個compare函數或許就已經令你不耐煩了,更何況要實現這些復雜的處理機制呢?很難保證你不會在處理這個問題的時候出錯,很多程序的bug往往就是這樣產生的。同時,你還應該感謝stdlib.h,它為你提供了qsort函數,否則,你還需要自己實現排序算法。如果你用的是冒泡法排序,那效率就不會很理想。……,問題真是越來越讓人頭疼了!

            下面再來看看STL后的代碼:

            //?name:example2_2.cpp
            //?alias:The?first?STL?program

            #include?
            <iostream>
            #include?
            <vector>
            #include?
            <algorithm>

            using?namespace?std;

            void?main(void)
            {
            ????vector
            <int>?num;????????//?STL中的vector容器
            ????int?element;

            ????
            //?從標準輸入設備讀入整數,?
            ????
            //?直到輸入的是非整型數據為止
            ????while?(cin?>>?element)
            ????????num.push_back(element);

            ????
            //?STL中的排序算法
            ????sort(num.begin(),?num.end());

            ????
            //?將排序結果輸出到標準輸出設備
            ????for?(int?i?=?0;?i?<?num.size();?i?++)
            ????????cout?
            <<?num[i]?<<?"\n";
            }

            posted on 2006-04-24 09:39 楊粼波 閱讀(428) 評論(0)  編輯 收藏 引用 所屬分類: 學習筆記

            99久久免费国产精品| 精品国产综合区久久久久久 | 久久99国产一区二区三区| 91精品国产综合久久香蕉| 久久久综合香蕉尹人综合网| 香蕉99久久国产综合精品宅男自 | 久久国产免费观看精品3| 国产高清美女一级a毛片久久w| 婷婷久久综合| 精品久久久久久久无码| 久久无码一区二区三区少妇| 国产人久久人人人人爽| 亚洲国产成人久久综合碰| 精品国产一区二区三区久久久狼| 久久婷婷五月综合色99啪ak| 99国产欧美精品久久久蜜芽| 久久综合九色综合网站| 国产福利电影一区二区三区,免费久久久久久久精 | 99久久精品日本一区二区免费| 久久久久国产一级毛片高清板 | 久久精品国产久精国产| 午夜天堂av天堂久久久| 亚洲&#228;v永久无码精品天堂久久| 国产A级毛片久久久精品毛片| 少妇被又大又粗又爽毛片久久黑人 | 97精品久久天干天天天按摩| 午夜精品久久久久久毛片| 97香蕉久久夜色精品国产| 久久无码一区二区三区少妇 | 亚洲国产精品综合久久一线 | 久久久精品久久久久影院| 一级做a爰片久久毛片毛片| 久久久久人妻一区精品果冻| 久久精品成人| 久久中文字幕视频、最近更新| 久久久久久a亚洲欧洲aⅴ | 久久久噜噜噜久久熟女AA片 | 一本色综合网久久| 久久久久亚洲av无码专区导航| 亚洲AV无码久久精品成人| 久久久久亚洲av无码专区导航 |