1.引出控制代碼CDC問題:1.CDC dc;dc.LineTo(point);無法運行2.CDC
今天呢,要學習的設計模式是“簡單原廠模式”,這是一個實現起來比較簡單的設計模式,但是確是經常使用的設計模式,同時呢,使用簡單原廠模式好處也是比較多的。可以說學習了這個模式性價比還是比較高的。1.宏觀理解簡單原廠模式 想來想去,還是覺得這個例子比較好:現在要完成一個計算機的功能,要求輸入兩個數A,B和一個運算子號(+,-,*,%),能夠輸出運算結果。注意哦,我們這裡說的是物件導向的編程,別總想面向過程的思路。既然是物件導向,那首先我們想想要有哪些類吧!先想一想,可不可以這樣有一個類Opera
1.malloc和new malloc與free是C++/C語言的標準庫函數,new/delete是C++的運算子,它們都可用於申請動態記憶體和釋放記憶體。對於非內部資料類型的對象而言,光用maloc/free無法滿足動態對象的要求。對象在建立的同時要自動執行建構函式,對象在消亡之前要自動執行解構函式,由於malloc/free是庫函數而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和解構函式的任務強加於malloc/free,因此C++語言需要一個能完成動態記憶體分配和初始化工作
我們學一個演算法,一定是為了用吧,所謂“學以致用”嗎?那麼判斷兩個鏈表是否相交有什麼用呢?這是因為一旦兩個鏈表出現相交的情況,就可能發生這樣的情況,程式釋放了鏈表La的所有節點,這樣就導致了另外一個與之有相交節點的鏈表Lb中的節點也釋放了,而Lb的使用者,可能並不知道事實的真相,這會帶來很大的麻煩。1.問題分析 看看兩個鏈表相交到底是怎麼回事吧,有這樣的的幾個事實:(假設鏈表中不存在環) (1)一旦兩個鏈表相交,那麼兩個鏈表中的節點一定有相同地址。 (2)一旦兩個鏈表相交,那麼兩個鏈表
一個人活到70歲以上,都會經曆這樣的幾個階段:嬰兒,少年,青年,中年,老年。並且每個人在各個階段肯定是不一樣的呀,我覺得可以說世界上不存在兩個人在人生的這5個階段的生活完全一樣,但是活到70歲以上的人,都經曆了這幾個階段是肯定的。實際上這是一個比較經典的建造者模式的例子了。1.初識建造者模式建造者模式實際上是常用的設計模式。顧名思義,builder的意思是建造者或者建築工人,談到建造自然會想到樓房。樓房是千差萬別的,樓房的外形、層數、內部房間的數量、房間的裝飾等等都不一樣,但是對於建造者來說,抽
問題定義: 給定n個整數(可能為負數)組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的子段和的最大值(0<i<j<n)。當所給的整均為負數時定義子段和為0,依此定義,比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,達到最大;而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。方法一:學過程式設計的都會,那就是枚舉i和j,求i和a[i]到a[j]之間的和的最大值。int
呼叫慣例(Callingconvention)決定以下內容:函數參數的壓棧順序,由調用者還是被調用者把參數彈出棧,以及產生函數修飾名的方法。MFC支援以下呼叫慣例:1._cdecl按從右至左的順序壓參數入棧,由調用者把參數彈出棧。對於“C”函數或者變數,修飾名是在函數名前加底線。對於“C++”函數,有所不同。如函數voidtest(void)的修飾名是_test;對於不屬於一個類的“C++”全域函數,修飾名是?test@@ZAXXZ。這是MFC預設呼叫慣例。由於是調用者負責把參數彈出棧,所以可以
1.qsort函數:原 型: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));功 能: 使用快速排序常式進行排序參 數:1 待排序數組首地址2 數組中待排序元素數量3 各元素的佔用空間大小4 指向函數的指標,用於確定排序的順序說 明:qsort函數是ANSI
求一個組合數Cnm的值,Cnm= n! /(n-m)!*m!化簡的結果為Cnm = (n*(n-1)*…*(n-m+1))/m!這個直接求根據公式直接求顯然是不行的,當n和m較大時,顯然是要溢出的。目前知道兩種解決這種題的思路: 思路一:可以利用遞推關係式Cnm = C(n)(m-1) + C(n-1)(m-1)來實現,這樣初始化前幾個組合數,在根據題目要求處理的最大n和m值,遞推求出所有的Cnm,並儲存。實現方法以後補上。 思路二:為了避免直接計算n的階乘,可以直接對公式兩邊取對數,於是得到:
1. 所有STL sort演算法函數的名字列表: 函數名 功能描述sort 對給定區間所有元素進行排序stable_sort 對給定區間所有元素進行穩定排序partial_sort 對給定區間所有元素部分排序partial_sort_copy 對給定區間複製並排序nth_element 找出給定區間的某個位置對應的元素is_sorted 判斷一個區間是否已經排好序partition
Memcopy和memmove函數在linux下看了一下兩個函數的源碼。兩個函數都在標頭檔string.h中定義,函數原型為:void * __cdecl memcpy ( void * dst,const void * src,size_t count);void * __cdecl memmove ( void * dst,const void * src,size_t count); 實現代碼如下:void * __cdecl memcpy ( void * dst,const void
1.vector的簡單介紹vector作為STL提供的標準容器之一,是經常要使用的,有很重要的地位,並且使用起來也是灰常方便。vector又被稱為向量,vector可以形象的描述為長度可以動態改變的數組,功能和數組較為相似。實際上更專業的描述為:vector是一個多功能的,能夠操作多種資料結構和演算法的模板類和函數庫,vector之所以被認為是一個容器,是因為它能夠像容器一樣存放各種類型的對象,簡單地說,vector是一個能夠存放任意類型的動態數組,能夠增加和壓縮資料。(註:STL的容器從實現的
我想要是說適配器模式,提一下“電壓”、“耳機”、“充電器”和 "USB”
始終相信能聽明白和能說明白是兩種不同的境界,如果對於一件問題,你說你明白了,但是你卻不能說明白,那在我眼裡就會有這樣的一個事實,那就是:你並沒有真正地明白。當然,也存在這種情況,那就是說是說明白了,但是未必對,這正是我擔心的情況,所以還請閱讀過我所有文章的朋友們指出我文章中的錯誤。謝謝你們……1.問題定義 設計一個演算法,把一個含有n個元素的數組A迴圈右移k位,要求時間複雜度是O(n)的。舉個例子說明一下演算法要達到的效果:數組中包含的元素為123456,現在要迴圈右移2位,則變成了561
1.問題描述:求一個正整數序列的最長單調自增子序列,子序列不要求是連續的。例如Input:55 2 4 3 1Output:22. 演算法複雜度是O(N*N)f[i]是以a[i]為最大值的子序列,那麼f[]的最大值就是要的結果。int f[],a[];f[0] = 1;for(i = 1 ; i < n ; i++ ){ f[i] = 1; for(j = 0 ; j < i ; j++) { If(a[j] < a[i] && f[j]+1
1. this指標的用處: 一個對象的this指標並不是對象本身的一部分,不會影響sizeof(對象)的結果。this範圍是在類內部,當在類的非靜態成員函數中訪問類的非靜態成員的時候,編譯器會自動將對象本身的地址作為一個隱含參數傳遞給函數。也就是說,即使你沒有寫上this指標,編譯器在編譯的時候也是加上this的,它作為非靜態成員函數的隱含形參,對各成員的訪問均通過this進行。 例如,調用date.SetMonth(9) <===> SetMonth(&date, 9)
1.關於list容器list是一種序列式容器。list容器完成的功能實際上和資料結構中的雙向鏈表是極其相似的,list中的資料元素是通過鏈表指標串聯成邏輯意義上的線性表,也就是list也具有鏈表的主要優點,即:在鏈表的任一位置進行元素的插入、刪除操作都是快速的。list的實現大概是這樣的:list的每個節點有三個域:前驅元素指標域、資料域和後繼元素指標域。前驅元素指標域儲存了前驅元素的首地址;資料域則是本節點的資料;後繼元素指標域則儲存了後繼元素的首地址。其實,list和迴圈鏈表也有相似的地方,
1.堆記憶體和棧記憶體堆記憶體是區別於棧區、全域資料區和代碼區的另一個記憶體地區。堆允許程式在運行時動態地申請某個大小的記憶體 在學習C程式設計語言時,會遇到兩個很相似的術語:堆記憶體和棧記憶體。這兩個術語雖然只有一字之差,但是所表達的意義差別還是很大的,堆記憶體和棧記憶體的區別可以用如下的比喻來看出:使用堆記憶體就象是自己動手做喜歡吃的菜肴,比較麻煩,但是比較符合自己的口味,而且自由度大。使用棧記憶體就象我們去飯館裡吃飯,只管點菜(發出申請)、付錢和吃(使用),吃飽了就走,不必理會切菜、
1.所謂的遞迴慢到底是什麼原因呢?大家都知道遞迴的實現是通過調用函數本身,函數調用的時候,每次調用時要做地址儲存,參數傳遞等,這是通過一個遞迴工作棧實現的。具體是每次調用函數本身要儲存的內容包括:局部變數、形參、調用函數地址、傳回值。那麼,如果遞迴調用N次,就要分配N*局部變數、N*形參、N*調用函數地址、N*傳回值。這勢必是影響效率的。 2.用迴圈效率會比遞迴效率高嗎?遞迴與迴圈是兩種不同的解決問題的典型思路。當然也並不是說迴圈效率就一定比遞迴高,遞迴和迴圈是兩碼事,遞迴帶有棧操作,迴圈則不一
字串處理的問題無論是做ACM題,還是實際項目開發中都是經常遇到的問題,字串處理問題往往用到很多有意思的經典演算法,個人覺得,對字串的處理技巧能看出一個將要畢業的大學生的編碼能力、演算法基礎和遇到問題的思考能力。最近就遇到兩個字串處理的問題:(1)字串移位包含問題