Time of Update: 2018-12-04
預設情況下,代碼檔案應該以utf-8的格式來儲存的。而如果在代碼檔案的轉移或者上傳下載過程中,弄亂了檔案的編碼格式,一般會出現亂碼的情況。例如windows系統下,中文就很容易出現亂碼,如,檔案本來是在utf-8格式下進行編輯的,結果卻意外儲存成了GB2312格式。如果知道原來的編碼格式是什麼,可以直接通過"選擇編碼"來選擇正確的編碼方式。而如果不清楚原有的格式,則可以這樣做:(1)選擇System Editor來開啟,即系統強大的記事本(2)通過記事本的"另存新檔"功能,轉換編碼方式(utf-
Time of Update: 2018-12-04
由於Qt本身實現的機制所限,我們在使用Qt製作某些軟體程式的時候,會碰到各種各樣這樣那樣的問題,而且很多是很難,或根本很難找到原因的,即使解決了問題,假如有人問您為什麼,您只能回答--不知道;今天我在這裡列舉的問題也是再編寫Qt程式時,總是碰到的問題,問題普遍,而答案卻不唯一,解釋這一個問題的說法很多,往往只適合某一種情況,因為這個錯誤太籠統了,他就是-- “undefined reference to `vtable
Time of Update: 2018-12-04
在Qt4中,QProcess作為QIODevice的繼承類,主要用來實現啟動外部應用程式,並且進行處理序間通訊的。調起外部程式,主要有兩種方式: start()和startDetached()。這兩種方式的區別是,start()後的進程與原有進程屬於父子進程關係,當父進程退出後,被調起的進程也會結束;而startDetached()會在程式調起完成後,將這兩個進程分離開來。(1)start()方法可以這樣使用:QProcess *pProcess = new
Time of Update: 2018-12-04
經典的深度優先演算法... C++代碼實現:template<class T>void findAllPaths(BTNode<T>* p,int epNum,int& curSum,vector<int> &path){curSum+=p->data;path.push_back(p->data);bool isLeaf=(!p->Lchild)&&(!p->Rchild);if(isLeaf&
Time of Update: 2018-12-04
關於地址空間一個比較抽象的概念,我們可以把它想象成一個長數組,每個數組元素佔一個位元組;而這個數組長度將由地址空間長度決定,如32位的地址空間的大小將為2^32個位元組(4GB),而64位的地址空間大小為2^64個位元組(理論上可看作是無限大)。這也就解析了,在32的作業系統中,為什麼最大隻能支援4GB的有效記憶體。也就是,超出了4GB後的記憶體都不會在定址範圍內,因此變成了剩餘的記憶體資源。物理地址(Physical Address
Time of Update: 2018-12-04
採用經典的遞迴遍曆: struct BTree{int data;BTree* left;BTree* right;};int nodes(BTree* t)//擷取節點數{if(t==NULL)return 0; //當前節點為NULLelse if(t->left==NULL&&t->right==NULL) //當前節點為葉子節點{return 1;}else {return nodes(t->left)+nodes(t->right)+1;}
Time of Update: 2018-12-04
在一些情況下,有些函數在程式中只會被一處地方引用或使用,況且這些函數的內容或邏輯並不複雜,那麼這樣的函數被過多的定義時,會顯得冗餘。那麼一種最佳化方法是使用lambda運算式,在linq2sql中大量使用了這種運算式。lamda運算式是一種匿名函數,所有 Lambda 運算式都使用 Lambda 運算子 =>,該運算子讀為“goes to”。下面是一個小例子,直接上代碼:一般的用法: private DispatcherTimer m_Timer;
Time of Update: 2018-12-04
題目:輸入兩個整數n 和m,從數列1,2,3.......n 中隨意取幾個數,使其和等於m ,要求將其中所有的可能組合列出來. 思路:在每一次遞迴中,考慮是與否將當前元素添加到數列中去,知道和達到某一值為止。代碼實現: #include<iostream>#include<deque>using namespace std; void findNums(int n,int leftSum,deque<int>& deq) { if(n<0||
Time of Update: 2018-12-04
在windowsphone7中,SIP是無法控制的。當輸入框(例如TextBox)聚焦時,那麼軟鍵盤就會自動彈出來;當文本輸入型的控制項失去焦點時,軟鍵盤就會自動隱藏。但有時候,我們想強制隱藏SIP(例如在顯示SIP的時候想儲存頁面資訊,並在隱藏SIP後實現頁面跳轉等),這個時候應該怎麼做呢?我想到的第一個方法是,讓聚焦的輸入控制項失去焦點。怎麼失去焦點呢,用了一個比較取巧的方法:假如有個TextBox叫UsernameTB,那麼這兩行代碼就可以實現需求---UserNameTB.Visibil
Time of Update: 2018-12-04
暫時寫成這樣了... int _atoi(char* a){if(!a)return -1;int res=0,i=0,temp=0;if(a[0]=='-'||a[0]=='+'){++i;}for(int i=0;i<strlen(a);++i){if (a[i]<'0'||a[i]>'9'){break;}//temp=a[i]-48;//if(INT_MAX-res<<3<temp)break;res=10*res+a[i]-48;}if(a[0]==
Time of Update: 2018-12-04
題目:輸入兩個整數序列。其中一個序列表示棧的push 順序,判斷另一個序列有沒有可能是對應的pop 順序。 思路:首先建立一個棧。從push序列開始遍曆,如果當前元素與pop序列當前元素相等,則兩個序列向前推進。 否則如果當前棧的棧頂元素與與pop序列當前元素相等,則pop序列向前推進,棧頂元素出棧。 否則如果當前push序列還沒遍曆完,則將push序列當前元素壓入棧,然後繼續迭代。 否則返回push與pop序列不對應的資訊。
Time of Update: 2018-12-04
有時候,喜歡看一下別人的故事,看一些人奮鬥的曆史。還沒想過會讀到這些故事,會把IT強人描述地這麼有血有肉,宛如傳奇。(這樣不算廣告了吧?)。剛開始讀的時候,就像是在讚美微軟的帝國傳奇的傳記。其實不然,當慢慢讀下去的時候,才發現原來很多東西值得去學習。或者怎麼樣也達不到他們的境界,瞭解他們的故事和奮鬥史,本身也是一種樂趣,不是嗎。成功從來就不是偶然的。雖然,我不覺得一個人的一生一定要有那種出人頭地或呼風喚雨的成功,平平淡淡真是自在的生活也自然有它的哲學真諦;但是,如果是自己想要得到成功,或者僅僅只
Time of Update: 2018-12-04
曾經年輕壯志,總有做不完的夢。曾經年少輕狂,總以為水到橋頭自然直。面對今天的自己,忽然覺得有點失望。忙忙碌碌的好幾年裡,我不知道自己真的有了多少收穫。細細數來,其實自己還真沒什麼可以炫耀的特長。學了兩年多的編程,現在還在東學西學,知識也是東拼西湊七零八落的,555...我該怎麼辦?我是不是有點麻木呢?這麼多年來,彷彿真的沒有遇上能讓自己有怦然心動,願意付出一生去奮鬥的目標...我真的那麼麻木嗎?幾乎什麼都學了,可很多都是蜻蜓點水,什麼都不精通。 有句話說得好:總有一樣拿得出手。哎,我學的東西還真
Time of Update: 2018-12-04
1)彙總(Aggregation) 彙總所表示的類之間的關係比較鬆散,其中一個類的存在與否並不會影響到另一些類的存在性。舉例:汽車類與車站類。 在C++代碼中可以表示: class A{}; class B{A * a;};2)組合(Composition) 組合表示的類之間的關係則比較強烈,比如一個類A的對象包含在類B中,那麼類B擁有對該對象的所有支配許可權(包括建立A的對象及其銷毀該對象等)。 舉例:汽車和車輪。 在C++代碼中可以表示: class A{};
Time of Update: 2018-12-04
古老的一道題:射擊運動員10槍打90環的打發有多少種?用一段程式實現,將每種打發列印出來。(每法成績均為整數,且在0到10環之間,可為0環也可為10環)。 思路:使用遞迴思想首先考慮到一共要打十槍。則可以分三種情況來考慮:1.如果當前超過了十槍或者積分超過了給定值,則返回2.如果當前為第十槍,判斷最後一槍的積分是否有可能達到給定值(0~10) 如果可以,可能值加1,然後返回;否則直接返回。3.其他情況下,繼續遞迴源碼:#include<iostream>using
Time of Update: 2018-12-04
之前寫過單鏈表的逆轉,不過代碼實在不怎麼簡潔...最近終於等把心安定下來,好好複習一下鏈表的基本操作,重新寫了一下鏈表的逆轉實現。個人覺得,學資料結構,還是多用一下模板吧。 而且最近在複習資料結構的時候總有這麼一種感覺,很多東西只有練了一遍又一遍,你才能對它有所掌握。以前會的,現在不一定還記得。你只有不斷去溫習它,知道你真正的擁有了這種知識。 和經典的解法一樣,代碼中採用了三個指標,分別指向已逆轉的鏈表部分的頭結點,當前需要重新導向的節點,尚未逆轉的鏈表的頭結點。貼上完整代碼:#include&
Time of Update: 2018-12-04
繼續溫習資料結構...實現用到了兩個棧:運算元棧與操作符棧。主要過程是將中序運算式轉換為後續運算式,然後按順序進行運算。簡單過程:1+8-7(中序) ---->1 8 7 - + (後序)--->1 1 + (運算8-7)---> 2 (運算1+1) 源碼:#include "stack.h" //利用到了前一篇文章實現的棧#define SIZE 256#define PSIZE 512char postOrder[SIZE];Stack<
Time of Update: 2018-12-04
比如有一個關於問答遊戲的程式,程式只有在輸入當前問題的答案才會繼續提問下一個問題,而輸入答案是由玩家來操縱的,程式要時刻監測輸入情況。 這種問題在控制台很容易解決,在Qt GUI應用程式則要用到線程來解決, #include <windows.h>//......代碼省略while(!isSend)//isSend是輸入答案的確認變數{ QCoreApplication::processEvents(); //支援介面重新整理
Time of Update: 2018-12-04
剛接觸了推播通知機制不久,也寫了幾個demo,以下是幾點小結:(1) 推送toast通知中的格式注意事項:首先xml的內容格式是固定的,如:string toastMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +"<wp:Notification xmlns:wp=\"WPNotification\">" + "<wp:Toast>" +
Time of Update: 2018-12-04
this指標其實就是在執行個體化一個對象後產生的指標,並且是指向對象本身。也就是說,即使沒有寫上this指標,編譯器在編譯的時候也會加上this指標。它作為非靜態成員函數的隱含形參,對各成員的訪問可以通過this來實現。 它的特點可以概括為: (1)this只能在成員函數中使用。而在全域函數或者靜態函數中不能使用this指標,因為它們並不屬於某一個對象。