Time of Update: 2018-12-04
(二)控制台I/O控制台的I/O是通過標準的資料流Console.In,Console.Out,Console.Error實現的。Console.In是TextReader類的一個執行個體,可以使用TextReader類定義的方法。但是,一般情況下,我們使用的是Console類提供的方法,共有三個方法,它們分別是Read(),ReadLine()和ReadKey()函數。讀取單個字元時通常使用Read()函數,它為靜態函數,用於從控制台讀取下一個字元,返回所讀取字元的int類型的值,如果需要使用
Time of Update: 2018-12-04
(三)檔案系統I/O對於作業系統來說,所有的檔案都是面向位元組的,而磁碟檔案是一種最常見的檔案類型。C#中提供了以位元組方式讀寫檔案的方法,最常見的方法就是使用位元組資料流讀寫檔案,當然我們也能夠將這些位元組資料流封裝在一個基於字元的對象中,使用字元資料流讀寫檔案。要建立一個附加到檔案的位元組資料流,我們可以使用FileStream類,由於FileStream類是派生於Stream類的位元組資料流類,而對於作業系統來說檔案都是面向位元組的,所以使用FileStream類可以對一切檔案進行讀寫操作
Time of Update: 2018-12-04
下面是用來輸出變數信息的宏:#define typeof(typevar) / do { / string tmp; / cerr << "type of "#typevar" :"; / tmp = "c++filt -t "; / system((tmp + typeid(typevar).name()).c_str()); / } while(0);在這個宏定義裡面,do{}
Time of Update: 2018-12-04
接著上面介紹的,在對檔案進行讀寫操作時,我們還可以重新導向標準的資料流。重新導向運算子“<”和“>”是由作業系統提供的,因此如果作業系統支援I/O重新導向,則可以重新導向標準的輸入輸出,而不必更改程式。另外,Console類也為我們提供了三個重新導向的方法,它們分別是Console.SetIn,Console.SetOut,Console.SetError,它們的函數定義如下:static void SetIn(TextReader newIn);static void
Time of Update: 2018-12-04
一、重載:同一個範圍內發生(比如一個類裡面),定義一系列同名方法,但是方法的參數列表不同。這樣才能通過傳遞不同的參數來決定到底調用哪一個。 值得注意的是,方法重載只有通過參數不同來判斷調用哪個方法,而不能通過傳回值。至於原因,可以這樣理解,你調用一個方法,如果有多個方法同名,系統必須要知道到底你要調用哪一個,參數可以協助系統在方法入口處得到答案,他根據你給的參數就知道該使用哪個方法。如果只有傳回值的不同,很多情況系統是不可能得到有效判斷條件的,比如:double method();
Time of Update: 2018-12-04
在C#中,委託(delegate)是一種參考型別,在其他語言中,與委託最接近的是函數指標,但委託不僅儲存對方法進入點的引用,還儲存對用於調用方法的對象執行個體的引用。簡單的講委託(delegate)是一種型別安全的函數指標. 僅僅看它的概念,可能還是很模糊,我們來舉例子由淺入深地說明一下。(強烈提醒:注意代碼中的一些關鍵注釋。代碼完全可以複製下來直接運行。)
Time of Update: 2018-12-04
C儲存類型和類型限定符(劉愛貴 - Aiguille.LIU) C儲存類分為兩類:自動儲存類(automatic)和靜態儲存類(static)。聲明對象時使用的儲存類說明符以及聲明的上下文共同決定了對象的儲存類。 自動儲存類對象對於一個程式塊來說是局部的,在退出程式塊時該對象將消失。 (1) 如果沒有使用儲存類說明符,或者如果使用了auto限定符,則程式塊中的聲明產生的都是自動儲存類對象。 (2)
Time of Update: 2018-12-04
由於項目的需要,要做一個C++的http請求用戶端實現上傳資料到服務端的功能,服務端用的是Spring MVC實現的Restful Web Service,起初設計時在服務端以byte[]的形式接受資料,畢竟服務端用java寫的,把接收到的資料流解析成相應的檔案這是完全可行的。 如果寫過Java或者其他語言的Http請求的人都知道,請求方式可以分GET和POST兩種,不過GET傳遞的資料充其量只是簡單類型的參數而已,在請求時的資料格式如代碼,這是請求http://www.ip138
Time of Update: 2018-12-04
1. c++貌似有這樣的方法,我用c代碼實現了一遍,沒有實現演算法最佳化。可以解決基本的字串尋找需求。/*** 返回 buf找到的與expr完全符合的第一項的第一個字元的索引 * zgr 2013-05-23 * buf-源字串 * offset-源字串位移-從位移量往後搜尋 * expr-匹配字串 * bufMaxLen-源字串長度 */int findFirst(const char* buf, int offset, const char* expr, int
Time of Update: 2018-12-04
Time of Update: 2018-12-04
用C函數來轉換Unicode和ANSI文字char sChar[MAX_PATH];const WCHAR wChar[] = L"我的朋友";// 把wChar這個Unicode字串轉換成ANSI字串,儲存到sChar,並且返回ANSI的字串大小,如果失敗,則返回-1 wcstombs(sChar, wChar, MAX_PATH);這樣是運行不過不去的,總是返回-1。後來經人提醒,需要在調用wcstombs之前要先設定字碼頁:char sChar[MAX_PATH];const
Time of Update: 2018-12-04
原始碼下載:http://download.csdn.net/detail/nuptboyzhb/49871411.統計文本中漢字的頻數,為後續的文本分類做基礎。對於漢字的統計,需要判斷讀取的是否為漢字。原始碼如下:[C++ code]/* *@author:鄭海波 http://blog.csdn.net/NUPTboyZHB *參考:實驗室小熊 *註:有刪改 */#pragma warning(disable:4786)#include <iostream>#include
Time of Update: 2018-12-04
1)Set是一種關聯容器,它用於儲存資料,並且能從一個資料集合中取出資料。它的每個元素的值必須唯一,而且系統會根據該值來自動將資料排序。每個元素的值不能直接被改變。 【重點】內部結構採用紅/黑樹狀結構的平衡二叉樹 multiset 跟set 類似,唯一的區別是允許索引值重複!!! 2)使用 需載入的標頭檔: #include<set>
Time of Update: 2018-12-04
1, 管理方式:對於棧來講,是由編譯器自動管理,無需我們手工控制;對於堆來說,釋放工作由程式員控制,容易產生memory leak。 (指標用棧,數組用堆)
Time of Update: 2018-12-04
記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域/靜態儲存區和常量儲存區。 1,棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變數的儲存區。裡面的變數通常是局部變數、函數參數等。 2,堆,就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般一個new就要對應一個delete。如果程式員沒有釋放掉,那麼在程式結束後,作業系統會自動收。
Time of Update: 2018-12-04
一,題目 用C++設計一個不能被繼承的類。二,分析 在Java中定義了關鍵字final,被final修飾的類不能被繼承。但在C++中沒有final這個關鍵字。 首先想到的是在C++中,子類的建構函式會自動調用父類的建構函式。同樣,子類的解構函式也會自動調用父類的解構函式。要想一個類不能被繼承,我們只要把它的建構函式和解構函式都定義為私人函數。那麼當一個類試圖從它那繼承的時候,必然會由於試圖調用建構函式、解構函式而導致編譯錯誤。
Time of Update: 2018-12-04
第一類方法也是常用的方法,通過多次的數值計算來完成交換,到現在知道的有下面三種:(1)加減法。a = a + b;b = a - b;a = a - b;該方法可以交換整型和浮點型數值的變數,但在處理浮點型的時候有可能出現精度的損失,例如對資料:a = 3.123456b = 1234567.000000交換後各變數值變為:a = 1234567.000000b = 3.125000很明顯,原來a的值在交換給b的過程中發生了精度損失。(2)乘除法。a = a * b;b = a / b;a =
Time of Update: 2018-12-04
1,最通用的模板交換函數模式:建立臨時對象,調用對象的賦值操作符。template <class T> void swap ( T& a, T& b ){ T c(a); a=b; b=c;} 需要構建臨時對象,一個拷貝構造,兩次賦值操作。2,針對int型最佳化:void swap(int & __restrict a, int & __restrict b){a ^= b;b ^= a;a ^=
Time of Update: 2018-12-04
轉自:http://www.ibm.com/developerworks/cn/linux/l-linux-kernel/ 現在讓我們從一個比較高的高度來審視一下 GNU/Linux 作業系統的體繫結構。您可以從兩個層次上來考慮作業系統, 2 所示。圖 2. GNU/Linux 作業系統的基本體繫結構最上面是使用者(或應用程式)空間。這是使用者應用程式執行的地方。使用者空間之下是核心空間,Linux 核心正是位於這裡。GNU C Library
Time of Update: 2018-12-04
本文主要說明對象建立時建構函式的執行順序,對象成員的初始化順序;對象銷毀時解構函式的執行順序,對象成員的銷毀順序。 “對象的構造從類層次的最根處開始,在每一層中,首先調用基類的建構函式,然後調用成員對象的建構函式。析構則嚴格按照與構造相反的次序執行,該次序是唯一的,否則編譯器將無法自動執行析構過程。 一個有趣的現象是,成員對象初始化的次序完全不受它們在初始化表中次序的影響, 只由成員對象在類中聲明的次序決定。這是因為類的聲明是唯一的,而類的建構函式可以有多個,