Time of Update: 2017-02-27
上一文中,我們大致明白了,利用MEF架構實現自動掃描並組裝向外延展群組件的思路。本文我們繼續前進,從最初的定義公用介面開始,一步步學會如何使用MEF。在上一文中我們知道,對於每一個實現了公用規範的向外延展群組件,都需要進行匯出,隨後我們的主應用程式檔案中會自動進行組裝。這便產生了一個疑問:為什麼需要匯出?如果大家還記得,以前我們用VC++寫.dll檔案時,都會把需要提供給別人調用的函數標記為匯出函數,這樣別人才能調用我們編寫的函數。就好比我們的家,我們一般會有客廳,既然叫客廳,當然是展現給客人看
Time of Update: 2017-02-27
在過去,我們完成一套應用程式後,如果後面對其功能進行了擴充或修整,往往需要重新編譯代碼生 成新的應用程式,然後再覆蓋原來的程式。這樣的擴充方式對於較小的或者不經常擴充和更新的應用程 序來說是可以接受的,而對於像ERP系統那樣複雜而且常常需要擴充的應用程式,這種擴充方法就不夠方 便,因為每次都要修改原始碼或重新引用組件。尤其是組件(許多dll),如果每編寫一個新組 件又要在主專案中引用一次,顯然主專案就不得不經常重建。要是能有一種機制,可以在主專案應
Time of Update: 2017-02-27
既然要使用動態編譯,那麼為他封裝一個調用類,在調用時省去大量不必要的編碼操作還是很有必要的 。為什麼要封裝?其實這個說起來很簡單,就是發現現有的動態編譯類在使用過程中顯 得並不是那麼好用。我覺得我可以讓他變的更易使用。所以我應該重新封裝了一個 DynamicCompile類。不過在這之前我還要考慮一下一個問題:我需要什麼?在使 用動態編譯的過程中,我逐漸的發現,動態編譯有以下幾種情況1.我拼接了一個靜態類的代碼,
Time of Update: 2017-02-27
通過之前2篇文章的介紹,大家一定發現了,動態編譯後的對象只能通過反射調用,但是反射往往是 一個程式效能的瓶頸,這個真的無法突破嗎?答案當然是否定的,接下來就我就來說說怎麼才能,挖掘 動態編譯的潛力。一點廢話我剛來部落格園才1星期左右,昨天才弄懂怎麼發表到首頁,先 說聲抱歉了,昨天的文章有幾個地方貼的源碼居然少了幾個字元,有點莫名其妙,也難怪有人不能運行 了,雖然是小錯誤,但是如果認真檢查的話也是可以避免的,這是我的失誤。還有一點,這個《 玩轉動態編譯》是一個系列的,雖然沒有大綱,不知道會寫到幾,
Time of Update: 2017-02-27
按如下規則轉換字母:Let's consider that a word has been typed with the Caps lock key accidentally switched on, if:either it only contains uppercase letters;or all letters except for the first one are uppercase.In this case we should automatically change the
Time of Update: 2017-02-27
題目連結:http://acm.nyist.net/JudgeOnline/problem.php?pid=227題目分析:給你橫縱座標分別表示門所在的位置,叫你求出從起點到終點的最短距離。演算法分析:該題好像有多種解法,我只說我做的。我用的是幾何+圖論。建模分析:1、先判斷兩個點之間是否可以串連。2、判斷兩個點是否可以連結的方法是用是否判斷牆與這兩點連成的線段是否相交。3、如果沒有相交則直接連接。4、最後最短路求出結果就好了更多精彩內容:http://www.bianceng.cnhttp:/
Time of Update: 2017-02-27
我們經常會遇到一種情況是匹配兩個字串,看strPar中是否含有str子串,如果有則返回子串在父串strPar中的位置,如果不存在則返回false.很明顯,我們可以通過暴力求解的方式解決該問題。即從strPar第一個字元和子串進行比較,若成功則返回第一個0,若不成功,再第二個字元開始比較,這樣的時間複雜度為O(M*N).可以看出,這個複雜度是相當高的,那麼我們有沒有一種複雜度會降低呢?顯然,有一種叫做KMP演算法可以大大降低複雜度O(M+N)。該演算法通過記憶的方式,避免了很多無用功。比如字元..
Time of Update: 2017-02-27
前言學過Java的人肯定對Hash這個詞非常之熟悉,HashTable、HashSet、HashMap等都是對雜湊表的封裝或改進。這次我們來看下雜湊表用C語言表示的封裝實現。雜湊表雜湊表又叫散列表,是實現字典操作的一種有效資料結構。雜湊表的查詢效率極高,在沒有衝突(後面會介紹)的情況下不需經過任何比較,一次存取便能得到所查記錄,因此理想情況下,尋找一個元素的平均時間為O(1)。雜湊表就是描述key—value對的映射問題的資料結構,這在Java中大家都知道,更詳細的描述是:在記錄的儲
Time of Update: 2017-02-27
At the start of each school year, a very important event happens at Hogwarts. Each of the first-year wizards and witches is assigned to one of the four Hogwarts houses. The bravest children are put to Gryffindor, the cleverest are put to Ravenclaw,
Time of Update: 2017-02-27
十字鏈表是有向圖的另一種鏈式儲存結構。可以看成是將有向圖的鄰接表和逆鄰接表(只考慮入度)結合起來得到的一種鏈表。在十字鏈表中,對應於有向圖中每一個頂點有一個節點,每一條弧也有一個結點。頂點之間是數組順序儲存,而弧是鏈式儲存。弧結點結構:頂點結點結構:十字鏈表形態:
Time of Update: 2017-02-27
原題連結: http://oj.leetcode.com/problems/edit-distance/這道題求一個字串編輯成為另一個字串的最少運算元,操作包括添加,刪除或者替換一個字元。這道題難度是比較大的,用常規思路出來的方法一般都是brute
Time of Update: 2017-02-27
題目:大整數乘法, 給定兩個長度不超過10000的整數, 返回乘法的結果.char* multi(char* number_a, char* number_b)代碼:/* * test.cpp * * Created on: 2014.04.24 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <iostream> #include <cstring>
Time of Update: 2017-02-27
題目: 輸入n個整數, 找出其中的最小k個數.使用快速排序(Quick Sort)的方法求解, 把索引值(index)指向前k個數.代碼:/* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #include <stdlib.h> int
Time of Update: 2017-02-27
題目描述:親們!!我們的外國友人YZ這幾天總是睡不好,初中奧數裡有一個題目一直困擾著他,特此他向JOBDU發來求助信,希望親們能幫幫他。問題是:求出1~13的整數中1出現的次數,並算出100~1300的整數中1出現的次數?為此他特別數了一下1~13中包含1的數字有1、10、11、12、13因此共出現6次,但是對於後面問題他就沒轍了。ACMer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數。輸入:輸入有多組資料,每組測試資料為一行。每一行有兩個整數a,b(0<
Time of Update: 2017-02-27
如標題題目:數學分析請看:http://www.planetseed.com/node/18560程式:#include <iostream> #include <vector> #include <string> #include <algorithm> #include <map> #include <math.h> using namespace std; struct HMS
Time of Update: 2017-02-27
合并排序,顧名思義,就是通過將兩個有序的序列合并為一個大的有序的序列的方式來實現排序。合并排序是一種典型的分治演算法:首先將序列分為兩部分,然後對每一部分進行迴圈遞迴的排序,然後逐個將結果進行合并。合并排序最大的優點是它的時間複雜度為O(nlgn),這個是我們之前的選擇排序和插入排序所達不到的。他還是一種穩定性排序,也就是相等的元素在序列中的相對位置在排序前後不會發生變化。他的唯一缺點是,需要利用額外的N的空間來進行排序。一
Time of Update: 2017-02-27
題目:給出一組數,把這些數串連起來形成一個大數。出處:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1846資料很大,使用long long都會溢出,所以要使用字元代表數值。一個知識點: 注意比較排序的比較函數 - 就是這裡卡了一下,不能是按字典順序排序,而是要有特殊寫法, 如下cmp函數。bool cmp(const
Time of Update: 2017-02-27
題目大意:有n個任務送到處理器處理,每個任務資訊包括r,d,w,r代表開始時間,w代表必須要結束的時間,w指需要多少時間處理。其中處理器的處理速度可以變速,問處理器最小需要多大速度才能完成工作?輸入:3 5 1 4 2 3 6 3 4 5 2 4 7 2 5 8 1 6 1 7 25 4 8 10 7 10 5 8 11 5 10 13 10 11 13 5 8 15 18 10 20 24 16 8 15 33 11 14 14 1 6 16 16 19 12 3 5 12 22 25
Time of Update: 2017-02-27
Once Chef decided to divide the tangerine into several parts. At first, he numbered tangerine's segments from1 to n in the clockwise order starting from some segment. Then he intended to divide the fruit into several parts. In order to do it he
Time of Update: 2017-02-27
給出一個數值,well,其實不是數值了,而是一大串數字,比如 98237482340328490328490324893024,非常長的數字。找出下一個Palindrome,這個Palindrome在數值上要比當前數值大(不能等於)。如:9 9 9 9->1 0 0 0 11 2 3 4 5 ->1 2 4 2