Time of Update: 2018-12-04
一,概述 模板方法模式:定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構既可以重定義該演算法的某些特定步驟 核心思想:抽象類別的方法延遲到子類實現。基類樣本指向子類實現二,樣本 老師出考題,學生抄題,然後答題。 1)第一種實現方式 缺點:學生每次都要抄題,而且每個學生類都要重複同樣的代碼。容易抄錯題、難更改。#include
Time of Update: 2018-12-04
一,概述 迪米特法則(Law of Demeter)又叫作最少知識原則(Least Knowledge Principle 簡寫LKP),就是說一個對象應當對其他對象有儘可能少的瞭解,不和陌生人說話。英文簡寫為: LoD 如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接相互作用。。如果其中一個類需要調用另一個類的某一個方法的話,可以通過第三者轉寄這個調用。 在類的架構上,每一個類都應盡量降低成員的存取權限(private)。類之間的松耦合越弱,
Time of Update: 2018-12-04
一,任意拖動視窗中的按鈕源碼:#include <gtk/gtk.h>GtkWidget *window;GtkWidget *fixed;GtkWidget *button;gboolean drag = FALSE; // 只在左鍵按下時拖動表單gint nX = 0;gint nY = 0;void destroy(GtkWidget *widget, gpointer *data){ gtk_main_quit();}static gint
Time of Update: 2018-12-04
一,概述 面板模式是軟體工程中常用的一種軟體設計模式。它為子系統中的一組介面提供一個統一的高層介面。使用子系統更容易使用。二,例如 股民買股票,大部分散戶自己買股票、國債、房地產,然後到時機拋售。這樣就要求每個股民對每支股票都和瞭解才能保證賺錢,就是說每個股民都要跟一大堆股票打交道。
Time of Update: 2018-12-04
一,概述 問題:求一維數組中連續子向量的最大和。 例如:a[6]={3,4,-2,-9,10,8}; 則最大連續子向量的和 為 10+8 = 18 1)解法一:簡單演算法#include <stdio.h>#define max(a, b) ((a)>(b)?(a):(b))int main(){ int a[6]={3,4,-2,-9,10,8}; int i,j,k; int sum=0; int
Time of Update: 2018-12-04
一,內嵌函式的用法 內嵌函式從源碼層層看,有函數的結構,而在編譯後,卻不具備函數的性質。編譯時間,類似宏替換,使用函數體替換調用處的函數名。一般在代碼中用inline修飾,但是能否形成內嵌函式,需要看編譯器對該函數定義的具體處理。 inline Tablefunction(int I) //是沒有效果的,編譯器只是把函數作為普通的函數申明,我們必須定義函數體。 Inline tablefunction(int I) {return I*I};
Time of Update: 2018-12-04
一,概述 1)代碼調優的目的是什嗎? 減少CPU已耗用時間;減少分頁或增加快取命中率;減少程式所需空間 2)代碼調優為什麼不能“濫用”? 1>效率的角色:不成熟的最佳化是大量編程災害的根源,可能危及程式正確性、功能及可維護性。 2>度量工具:利用效能偵查工具,找到“熱點”代碼,即程式關鍵地區,然後最佳化。
Time of Update: 2018-12-04
一,概述 1)節省空間的帶來的好處 程式變小使得載入更快;更容易讀入快取;需要操作的資料減少從而減少操作時間。 2)節省空間的方法 數學函數式替代要儲存的資料。簡單例子為:a[i]=i 。如果你要讀取數組第i個元素只需要通過函數f(i) = i得到元素值,而不需要將所有資料存放區在數組中。
Time of Update: 2018-12-04
一,概述 適配器模式(有時候也稱封裝樣式或者封裝)將一個類的介面適配成使用者所期待的。一個適配允許通常因為介面不相容而不能在一起工作的類工作在一起,做法是將類自己的介面包裹在一個已存在的類中。二,設配器基本構成 Target:客戶期待的介面(可以是具體的或抽象的類) Adaptee:需要適配的類(使用者要調用,但是不能直接調用)
Time of Update: 2018-12-04
尋找最小的k個元素(數組)題目:輸入n個整數,輸出其中最小的k個。例如輸入1,2,3,4,5,6,7和8這8個數字,則最小的4個數字為1,2,3和4。一,最原始的一種方法 插入排序,後輸出最小的k個源碼:#include "stdio.h"/*尋找最小的k個數方法*/void min(int a[],int n,int k){int temp;for(int i=1;i<n;i++) //插入排序 {for(int j=0;j<i;j++) {
Time of Update: 2018-12-04
一,概述 Builder模式的定義是:將一個複雜物件的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。 首先它意圖是要構建一個複雜的對像,而這個複雜的對像往往需要由好幾個子對像或分步驟來完成最終的這個對象的構建,而這個複雜物件的子對像經常需要不斷的變化,但它的構建過程是相對是穩定的。 精髓:通過一個統一的工序或者約束構造出同一的對象。二,引例 1)構造一個小人,需要有腳、手、身體、頭
Time of Update: 2018-12-04
題目:輸入一個英文句子,翻轉句子中單詞的順序,單詞內字元的順序不變。 句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例子:輸入“I am a student.”,則輸出“student.a am I”。總體思想:根據字串中的' '將切割出每一個單詞,然後倒置順序,最後將整個字串倒置。C++源碼:#include<iostream>#include<string>using namespace std;void
Time of Update: 2018-12-04
一,概述 觀察者<Observer>模式(有時又被稱為發布-訂閱<Publish/Subscribe>模式、模型-視圖<Model/View>模式、源-收聽者<Source/Listener>模式或從屬者<Dependents>模式)是軟體設計模式的一種。在此種模式中,一個目標物件管理所有相依於它的觀察者物件,並且在它本身的狀態改變時主動發出通知。這通常透過呼叫各觀察者所提供的方法來實現。此種模式通常被用來實作事件處理系統
Time of Update: 2018-12-04
一,概述 概念:將對象組合成樹形結構以表示“部分整體”的階層。組合模式使得使用者對單個對象和使用具有一致性。 Client:用戶端 Component:組合模式中對象介面聲明,在適當情況下,實現所有類共有介面的預設行為。聲明一個介面用於訪問和管理其子組件。 SubMenu:表示節點對象,但是沒有子節點。
Time of Update: 2018-12-04
題目:輸入一個整數和一棵二叉樹。從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。列印出節點和等於輸入整數的所有路徑。例如 輸入整數22和如下二叉樹 10 / \ 5 12 / \ 4 7則列印出兩條路徑:10, 12和10, 5, 7。二叉樹節點的資料結構定義為:struct BinaryTreeNode //二叉樹節點結構{ int m_nValue; BinaryTreeNode
Time of Update: 2018-12-04
一,概述 1)插入排序 要找到合適的位置,需要判斷前一個元素比t小而後一個元素比t大。然後將t插入正確位置。 比較a[j-1] 跟 a[j] 的關係很關鍵 isort1: 沒有到達最終位置,就交換該元素和它前面的元素#include <algorithm> for(int i=1;i<5;i++)for(int j=i;j>0&&a[j-1]>a[j];j--)
Time of Update: 2018-12-04
一,概述 抽象工廠:提供一個建立一些列相關或相互依賴的介面,而無需指定他們具體的類。 抽象原廠模式是所有形態的原廠模式中最為抽象和最具一般性的一種形態。 抽象原廠模式是指當有多個抽象角色時,使用的一種原廠模式。
Time of Update: 2018-12-04
一,概念 malloc:向系統申請分配指定size個位元組的記憶體空間。傳回型別是 void* 類型。void* 表示未確定類型的指標。C規定,void* 類型可以強制轉換為任何其它類型的指標。 free():配合malloc成對出現,釋放記憶體空間。 new :當我們使用關鍵字new在堆上動態建立一個對象時,它實際上做了三件事:獲得一塊記憶體空間、調用建構函式、返回正確的指標。 delete:配合new,用來調用解構函式,釋放記憶體空間。 二,用法
Time of Update: 2018-12-04
一,概述 問題描述:如何產生0~n-1內的m個隨機整數(不重複) 需求:按序輸出,並且保證每個子集被選中的可能性相等。 1)給出下面代碼#include "stdio.h"#include "stdlib.h"#include "time.h"void getRandNumber(int m,int n)//在0 -- n-1 中挑選m個 隨機數 {srand(time(NULL));//這個很關鍵 int
Time of Update: 2018-12-04
一,概述 第十二章,介紹產生某個範圍內隨機數,並按順序輸出。 本章主要介紹,儲存按序輸出的容器或者說存放集合的方法。並實現按序插入,按序輸出。 1)set容器 1>set容器小例子:#include <iostream>#include <set>using namespace std;int main(){ set<int> S; S.insert(1);