Time of Update: 2018-12-05
凸函數(convex function)凸函數是一個f {R:R},對任意αβ>=0且α+β=1,有f(αx+βy)<=
Time of Update: 2018-12-05
評“程式員怎麼樣才能保證自己的程式沒有BUG”代碼複核(Review)是為了找錯誤嗎?看代碼能看到邏輯錯誤嗎?不,跑測試程式都不能找到錯誤,看代碼怎麼可能看出來?複核代碼的目的有:* 檢查代碼是否規範,如命名規範,注釋* 保證一段代碼至少有兩人共同熟悉,可以由任一人來更改。* 檢查設計思想是否如實實現,代碼如何表達設計* 審察未文檔化的細節設計,即由代碼直接表達的設計,由代碼人口述設計並對照代碼*
Time of Update: 2018-12-05
關聯式容器
Time of Update: 2018-12-05
stl提供了很多泛型演算法,基本涵蓋了一般程式所能應用到的所有演算法。本篇以目錄式的方式,介紹stl的包含的演算法。在以後的編程實踐中,如果遇到相似的問題,應該參考stl的演算法代碼。 數值演算法1、T accumulate(InputIterator first, InputIterator last, T init)累加,該演算法要求提供一個明確的初始值init,原因是這樣可以確保當first和last之間沒有元素時,函數的傳回值是確定的。 2、OutputIterator
Time of Update: 2018-12-05
侯捷STL源碼剖析中列出了list的sort演算法源碼,感覺挺有意思: template <class T, class Alloc>void list<T,Alloc>::sort(){if (node->next==node||link_type(node->next)->next==node) return; list<T,Alloc> carry; list<T,Alloc> counter[64]; int
Time of Update: 2018-12-05
文章目錄 點(pt、point)像素(pixel、px)DPI、PPIex、x-heightem行距(Line-height、Leading)字間距(Letter-spacing、Tracking)字元間距調整(Kerning) 我們每天設計都在與字型打交道。但是我們一直沒有認真在意他們的存在。我們沒有很好地使用過他們,甚至濫用他們。這一切是因為我們不瞭解他們。Information Architects
Time of Update: 2018-12-05
本文總結搜集物件導向思想資料,並結合本人的思索,力圖能夠加深對物件導向的理解。物件導向的方法論: 來自c++primer第十章物件導向是一種程式設計的概念性方法,物件導向最重要的特徵是抽象、封裝和資料隱藏、多態、繼承、代碼的可重用性。下面用一個例子來展示面向過程和物件導向程式設計的差別要編寫一個程式用於記錄壘球隊的統計資料,涉及的資料包括隊員姓名、擊球次數、擊中次數、命中率等。 如果採用面向過程的程式設計方法,那我們需要先輸入這些球隊的相關資料,因此我們可能需要一個函數專門來處理輸入
Time of Update: 2018-12-05
最近嘗試使用一個獨立的線程來做圖片的解碼,這個線程在推出的時候老是出現記憶體泄露,後查明CImageDecoder::FileNewL(...) 記憶體泄露,其實並不是CImageDecoder,正確的解決方案是 在子線程中退出時一定要調用REComSession::FinalClose() 這個靜態函數,釋放 ECom plugins
Time of Update: 2018-12-05
文章目錄 11.3.1除法散列法11.3.2乘法散列法11.3.3全域散列 實現字典的一種有效資料結構為散列表,在最壞的情況下,在散列表中尋找一個元素的時間與在鏈表中尋找一個元素的時間相同,為Θ(n)。在實踐中,散列技術的效率是很高的,在一些合理的假設下,在散列表中尋找一個元素的期望時間為O(1)。散列表是普通數組機率的推廣。 11.1直接定址表 當關鍵字的全域U比較小時,直接定址時一種簡單而有效技術。假設某個動態集合都一個取自全域U={0
Time of Update: 2018-12-05
【密碼學02】密碼系統原理及數學背景上一篇文章【密碼學】四大主題簡單介紹 一文提到要實現資訊傳輸的保密性、完整性,以及身份鑒別和抗抵賴,使用的技術手段有:1) 密碼技術(加密與解密)。2) 雜湊技術,即散列技術。3) 隨機數。4) 時間戳記。下面先討論密碼技術。是一個典型的密碼系統,展示了密碼技術的應用情境: 明文:P 密文:C 加密金鑰:K1 解密密鑰:K2 加密方法:E 解密方法:D加密與解密的關係可以用公式簡潔地表示:C =
Time of Update: 2018-12-05
文章目錄 1、Vector2、List3、Deque4、Stack5、Queue6、heap7、Priority Queue
Time of Update: 2018-12-05
1、概述對象的三維座標需要經過一系列的計算才能編程螢幕上的像素:座標變換:通過矩陣乘法實現,包括模型變換,視角變換,投影變換。涉及的操作有,平移、旋轉、縮放、透視投影、正交投影;剪下:由於整個情境最終被繪製到一個矩形視窗上,位置在視窗外的圖元必需被剪下掉;視口變換:將變換後的座標組應到螢幕像素。拿照相來做比喻,照相可能需要以下幾個步驟:1、放置好三腳架和相機(視角變換)2、把情境中的物體擺好位置(模型變換)3、調整焦距(投影變換)4、確定最終照片的大小(視口變換)所有的座標變換是通過一個4x4的
Time of Update: 2018-12-05
經過系統的幾個月測試,對測試有一定的瞭解,發現單元測試是測試一個非常重要的一部分,於是對單元測試發生了興趣,通過閱讀資料、實踐。對單元測試進行了一些總結,希望能夠對大家有些協助,得到拋磚引玉的作用。1. 什麼是單元測試單元測試是開發人員編寫的一小段代碼,用於檢驗被測代碼的一個很小的、很明確的功能是否正確。通常而言,一個單元測試是用於判斷某個特定條件(或者情境)下某個特定函數的行為。例如,你可能把一個很大的值放入一個有序list 中去,然後確認該值出現在list
Time of Update: 2018-12-05
今天調查一個程式崩潰的bug,最後的結果是類成員之間的依賴導致的析構問題。 問題描述如下:類A有兩個成員,類B和類C的執行個體各一個,其中成員b依賴於成員c class A{ classA() { mb.setC(&mc); } classB mb; classC mc;}; 而類B又有類似下面的解構函式 ~classB() { mc->fun();
Time of Update: 2018-12-05
電腦螢幕一個像素的顏色值由RGB(或RGBA,A並不直接用於顏色顯示)三個分量組成;不同裝置單個像素能顯示的顏色數不用,儲存顏色值的記憶體大小也不用,一般用bit來衡量,8-bit
Time of Update: 2018-12-05
通過一段時間的UT,發現UT除了用來保證代碼的邏輯正確之外,還可以用來發現代碼的設計缺陷。當然這個不是通過運行UT來發現設計缺陷,而是在寫UT的過程中。我們沒有採用測試驅動的開發模式,而是寫一些代碼相應做一些UT。這樣如果發現針對某塊代碼的UT很難寫,那往往意味著這塊代碼的設計存在著諸如:介面不夠清晰、類的責任劃分不明確、源檔案存在不必要的編譯依賴...。說白了就是“可測性”的問題。 在寫UT的時候應該保持這種敏感,發現並及時修正這樣的設計問題。
Time of Update: 2018-12-05
本篇探析signal slot的串連和調用是如何?的。 宏SLOT,SIGNAL在qobjectdefs.h中有這樣的定義: # define METHOD(a) "0"#a# define SLOT(a) "1"#a# define SIGNAL(a) "2"#a 不過是在方法簽名之前加了一個數字標記。因為我們既可以將signal串連到slot,也可以將signal串連到signal,所有必須要有某種方法區分一下。 QObject::connect()bool QObject:
Time of Update: 2018-12-05
演算法所謂演算法就是定義良好的計算過程,它取一個或一組數值作為輸入,併產生出一個或一組值作為輸出。或者可以看做是解決一個具有良好規格說明的計算問題的計算過程。 如果一個演算法對其每個輸入執行個體都能輸出正確的結果並停止,則稱它是正確的。不正確的演算法對於某些輸入來說可能根本不會停止,或者停止時給出的不是預期的結果。不過如果這些“不正確”演算法的錯誤率能夠得到控制的話,有時也是有用的。 演算法可以用自然語言、電腦程式或者硬體設計等形式來表達,不論採用何種形式,唯一的要求就是演算法的規格說明必須提供
Time of Update: 2018-12-05
如果你正在編寫的類會通過回呼函數或Observer模式廣播某種狀態的改變或時間的發生,那麼請小心:你無法預料Observer會做什麼事情,它可能又會調用這個類的某個方法,從而導致你的類被“重入”,這可能會破壞類狀態。下面是本人在寫代碼時遇到過的類似情形: void ClassA::DoSomething(){for(int i=0; i<mDataArray.count();
Time of Update: 2018-12-05
文章目錄 迭代器是一種smart pointer迭代器相應類型迭代器的分類 1、迭代器的的設計思維——stl的關鍵所在無論是泛型思維或STL的實際運用,迭代器都扮演著重要角色。STL的中心思想在於將容器和演算法翻開,彼此獨立。容器和演算法的泛型化,從技術角度看並不困難,C++的class template和function template可以分別達成目標,如何設計出兩者之間的粘合劑,才是大難題,而迭代器正是扮演了這個重要角色。以下是容器、