Time of Update: 2018-12-03
條款30:確保目標區間足夠大STL容器在被添加時(通過insert、push_front、push_back等)自動擴充它們自己來容納新對象。這工作的很好,有些程式員因為這個信仰而被麻痹,認為他們不必擔心要為容器中的對象騰出空間,因為容器自己可以照顧好這些。如果是那樣就好了!當程式員想向容器中插入對象但並沒有告訴STL他們所想的時,問題出現了。這是一個常見的可以自我表現的方法:int transmogrify(int x); // 這個函數從x //
Time of Update: 2018-12-03
條款32:如果你真的想刪除東西的話就在類似remove的演算法後接上erase我將從remove的複習開始這個條款,因為remove是STL中最糊塗的演算法。誤解remove很容易,驅散所有關於remove行為的疑慮——為什麼它這麼做,它是怎麼做的——是很重要的。這是remove的聲明:template<class ForwardIterator, class T>ForwardIterator remove(ForwardIterator first,
Time of Update: 2018-12-03
在安裝Flash Builder 4.6,並且安裝了eclipse外掛程式之後發現在Myeclipse中按alt + / 出現了JavaElementLabels_comma_string=.... 的字元影響包名顯示後來查到需要在flash builder
Time of Update: 2018-12-03
條款33:提防在指標的容器上使用類似remove的演算法你在管理一堆動態分配的Widgets,每一個都可能通過檢驗,你把結果指標儲存在一個vector中:class Widget{public: ... bool isCertified() const; // 這個Widget是否通過檢驗 ...};vector<Widget*> v; // 建立一個vector然後用... // 動態分配的Widgetv.push_back(new Widget); //
Time of Update: 2018-12-03
12 本地化本地化的方法推薦Parsley基於應用程式有很大的不同,取決於你是否是使用Flex。對於Flex應用程式Parsley整合了Flex ResourceManager。對於Flash應用程式Parsley提供了它自己的本地化模組。事實上,從version 1的架構模組是唯一倖存的部分,儘管有一些重大的重構。12.1 資源綁定這是唯一的能在Flex和Flash應用程式一樣工作的Parsley本地化功能,所以我們將首先解釋一下。你可以把[ResourceBinding]中繼資料標籤放在任何
Time of Update: 2018-12-03
條款34:注意哪個演算法需要有序區間不是所有演算法可以用於任意區間。比如,remove(參見條款32和33)需要前向迭代器和可以通過這些迭代器賦值的能力。所以,它不能應用於由輸入迭代器劃分的區間,也不能是map或multimap,也不能是set和multiset的一些實現(參見條款22)。同樣,很多排序演算法(參見條款31)需要隨機訪問迭代器,所以不可能在一個list的元素上調用這些演算法。如果你冒犯了這些規則,你的代碼將不能編譯,可能會出現一個非常冗長和不可理解的錯誤資訊(參見條款49)。但其
Time of Update: 2018-12-03
條款 2:
Time of Update: 2018-12-03
條款29:需要一個一個字元輸入時考慮使用istreambuf_iterator假設我們要把一個文字檔拷貝到一個字串對象中。似乎可以用一種很有道理的方法完成:ifstream inputFile("interestingData.txt");string fileData((istream_iterator<char>(inputFile)), // 把inputFile讀入 istream_iterator<char>()); //
Time of Update: 2018-12-03
14 遠端存取Parsley 是一個用戶端應用程式的架構,並不需要任何特定的伺服器端技術。不過,在本章中,我們想描述一些遠程調用解決方案。如何整合服務到應用系統架構中參見 11 構建MVC架構。除了基礎的AMF的遠程解決方案,在本章中你也可以融入HTTP服務或WebServices到控制器。該方法類似於在MVC章介紹的:你寫一個控制器動作類,用於處理從視圖中派發的訊息,等待結果,最後發送訊息,其中包含一個parsley訊息。14.1 Flex 遠程服務對於遠程服務,架構可以在兩個方面協助你,首先
Time of Update: 2018-12-03
1、clone()是Object中的一個protected方法2、Object沒有實現Cloneable介面3、Cloneable中沒有clone()方法4、要用clone()必須implements Cloneable5、應該重寫clone()方法,否則就是"shallow" copy,只是講值拷貝過去,要是field裡面有reference type就有可能 出錯(因為有可能共用資料),但如果field
Time of Update: 2018-12-03
條款40:使仿函數類可適配假設我有一個Widget*指標的list和一個函數來決定這樣的指標是否確定一個有趣的Widget:list<Widget*> widgetPtrs;bool isInteresting(const Widget *pw);如果我要在list中找第一個指向有趣的Widget的指標,這很簡單:list<Widget*>::iterator i = find_if(widgetPtrs.begin(), widgetPtrs.end(),
Time of Update: 2018-12-03
條款39:用純函數做判斷式我討厭為你做這些,但我們必須從一個簡短的詞彙課開始:判斷式(predicate)是返回bool(或者其他可以隱式轉化為bool的東西)。判斷式在STL中廣泛使用。標準關聯容器的比較函數是判斷式,判斷式函數常常作為參數傳遞給演算法,比如find_if和多種排序演算法。(排序演算法的概覽可以在條款31找到。)純函數是傳回值只依賴於參數的函數。如果f是一個純函數,x和y是對象,f(x, y)的傳回值僅當x或y的值改變的時候才會改變。
Time of Update: 2018-12-03
STL搜尋演算法的區別[1]你要尋找什麼,而且你有一個容器或者你有一個由迭代器劃分出來的區間——你要找的東西就在裡面。你要怎麼完成搜尋呢?你箭袋中的箭有這些:count、count_if、find、find_if、binary_search、lower_bound、upper_bound和equal_range。面對著它們,你要怎麼做出選擇?簡單。你能很快很容易地做到。能更快,更容易,更好。暫時,我假設你有一對指定了搜尋區間的迭代器。然後,我會考慮到你有的是一個容器而不是一個區間的情況。要選擇搜
Time of Update: 2018-12-03
逆序對:設a是一個有n個不同元素的數組,,如果在i<j的情況下,a[i]>a[j],則(i, j)稱為a的一個逆序對。給定一個數組,求逆序對的個數,可以通過做迴圈,在n^2的時間內求出逆序對數目,但通常用歸併排序在nlog(n)的時間內解決,只是當求出逆序對數目後,數組也已經排好序了,如果不想讓原數組發生變化,可以把原數組拷貝到另一個數組,對新數組操作就好。整個過程一邊排序一邊數,遞迴到最深的地方如果有一個數,那麼返回0,如果有兩個數,看做有兩個元素的子數組,兩個子數組都已經排好序,
Time of Update: 2018-12-03
條款36:瞭解copy_if的正確實現STL有很多有趣的地方,其中一個是雖然有11個名字帶“copy”的演算法:copycopy_backwardreplace_copyreverse_copyreplace_copy_ifunique_copyremove_copyrotate_copyremove_copy_ifpartial_sort_copyunintialized_copy 但沒有一個是copy_if。這意味著你可以replace_copy_if,你可以remove_copy_if,你
Time of Update: 2018-12-03
條款38:把仿函數類設計為用於值傳遞C和C++都不允許你真的把函數作為參數傳遞給其他函數。取而代之的是,你必須傳指標給函數。比如,這裡有一個標準庫函數qsort的聲明:void qsort(void *base, size_t nmemb, size_t size, int (*cmpfcn)(const void*, const
Time of Update: 2018-12-03
其實就是讓"123456224437889"變為"123456789",設定一個變數last,始終指向沒有重複字元的字串的下一個位置,最後讓s[last]=0,就搞到一個符合要求的C字串了void del_duplicated(char *s){ int n = strlen(s); if(n<=1) return; int i, j; int last = 1; //剛開始認為被處理過的只有s[0] for(
Time of Update: 2018-12-03
條款31:瞭解你的排序選擇How can I sort thee? Let me count the
Time of Update: 2018-12-03
條款5:盡量使用區間成員函數代替它們的單元素兄弟快!給定兩個vector,v1和v2,使v1的內容和v2的後半部分一樣的最簡單方式是什嗎?不要為“當v2有偶數個元素時才有一半”而煩惱,只要做一些合理的東西。時間到!如果你的答案是v1.assign(v2.begin() + v2.size() /2, v2.end());
Time of Update: 2018-12-03
要求在O(1)的空間複雜度進行要旋轉多少層呢?1 23 4這個旋轉一層1 2 34 5 67 8 9也是一層,因為5不用旋轉1 2 3 45 6 7 89 10 11 1213 14 15 16旋轉兩層所以需要旋轉的層數是n/2每層需要旋轉4條邊,我們按這種方式轉:左→頂,底→左,右→底,頂→右,對於每一個要進行旋轉的邊,先旋轉倒數第一個數,比如要將第一列旋轉到最頂,那麼先把a[n-1][0]轉到a[0][0],在把a[n-2][0]轉到a[0][1]……