Time of Update: 2017-02-27
我們應該知道傳統的C++只有一個全域的namespace,但是由於現在的程式的規模越來越大,程式的分工越來越細,全域範圍變得越來越擁擠,每個人都可能使用相同的名字來實現不同的庫,於是程式員在合并程式的時候就會可能出現名字的衝突。namespace引入了複雜性,解決了這個問題。namespace允許像類,對象,函數聚集在一個名字下。本質上講namespace是對全域範圍的細分。我想大家都見過這樣的程式吧:hello_world.c#include <iostream>using
Time of Update: 2017-02-27
我們知道,在C/C++中,向一個函數傳遞數組時,實際上傳送的是這個數組的首地址,也即是一個指標類型。所以,在函數中,我們沒有辦法知道這個傳遞進來的數組的長度到底為多長,一個普遍的方法就是再增加一個參數,來記錄傳遞進來的數組的長度。不過在C++中,使用模板機制,可以很好地解決這個問題,如下面的代碼所示:#include <iostream>using namespace std;template<class T, int N>void array(T
Time of Update: 2017-02-27
發現<<的優先順序好低呀...還是我太無知了...#include <stdio.h>#define GET_BIT(a, b, c) a << b - cint main(){int a = 1;int b = 5;int c = 4;printf("%d\n", GET_BIT(a, b, c) + 1);}result: 4C的優先順序口訣括弧成員第一; //括弧運算子[]() 成員運算子. ->全體單目第二;
Time of Update: 2017-02-27
以下的逸出字元使一般字元表示不同的意義.逸出字元 描述\' 單引號\" 雙引號\\ 反斜線\0 Null 字元\a 響鈴\b 後退\f 走紙\n 換行\r 斷行符號\t 水平定位字元\v 垂直定位字元\xnnn 表示十六進位數(nnn)以下是使用逸出字元的程式碼範例:printf( "This\nis\na\ntest\n\nShe said, \"How are you?\"\n" );輸出:ThisisatestShe said,
Time of Update: 2017-02-27
C語言套件含5個基礎資料型別 (Elementary Data Type): void, integer, float, double, 和 char. 類型 描述 void 空類型 int 整型 float
Time of Update: 2017-02-27
1.記憶體配置方式記憶體配置方式有三種:[1]從靜態儲存地區分配。記憶體在程式編譯的時候就已經分配好,這塊記憶體在程式的整個 運行期間都存在。例如全域變數,static變數。[2]在棧上建立。在執行函數時,函數內局部變數的儲存單元都可以在棧上建立,函數執 行結束時這些儲存單元自動被釋放。棧記憶體配置運算內建於處理器的指令集中,效率很高, 但是分配的記憶體容量有限。[3]從堆上分配,亦稱動態記憶體分配。程式在啟動並執行時候用malloc或new申請任意多少的內
Time of Update: 2017-02-27
迴文:迴文就是正讀反讀都一樣的字串,例如:"radar","able was i ere i saw elba" 和 "a man a plan a canal panama"(如果忽略空格) 。請編寫遞迴函式testPalindrome,在數組中的字串為迴文時返回true,否則返回false. 函數忽略字串中的空格和標點符號。#include <stdio.h>/* 字串 一半數 總個數*/int charf(char
Time of Update: 2017-02-27
1、常量指標指向常量的指標變數的定義和使用如:const int *p;2、指標常量如:char* const p = "abcde";可以這麼理解:const p的類型式char*,所以p是不可以再修改的。也就是所p必須是在定義時就已經初始化,並且不能再修改了。3、指向常量的指標常量指向常量的指標常量如:const int* const p = &b;可以這麼理解int* const p的類型時const,那麼也就是所int* const
Time of Update: 2017-02-27
回呼函數(callback)與仿函數(functor)很多時候從用途上來看很相似,以致於我們經常 將它們相提並論。例如:inline bool compare(int a, int b){ return a > b;} struct comparer { bool operator()(int a, int b) const { return a > b; }}; void main(){ std::vector<int> vec, vec2;
Time of Update: 2017-02-27
* 容器的迭代器還有幾種:+ iterator:正常迭代器(常用)+ reverse_iterator:反向迭代器(有時也用)- rbegin(),rend()//返回反向迭 代器+ const_iterator:常量迭代器+ const_reverse_iterator: iterator find(資料){ for( 從beg;!=end;it ++) if(*it==資料) return it; return end;//未找到,返回無效迭代器}//查詢*it = new_data;
Time of Update: 2017-02-27
作為一個有著正常審美觀的人,我簡直無法忍受C++/CLI(以及managed c++)的醜陋。不 過,近來發現,這個醜東西也還有點用,在把原生開發介面封裝成託管開發介面時,比C#的 互操作容易的多(互操作看了看,頭大呀)。磕磕絆絆幾天,終於把一個SDK開發包轉換完成 了。總結經驗如下:1. 對於clr中的參考型別,定義變數時要用個^符,如"String^ var1"、 "array<int>^
Time of Update: 2017-02-27
今天寫程式的時候,又用到這個idiom了,於是順便貼出來。這個idiom蠻簡單的,估計很 多人都用過。今天主要是貼出來給新手參考(老手們就甭費時看此帖了)。為了說明這個手法具體該咋用,咱舉一個簡單的例子來說事兒。比方說要開發一個網路程 序,其中需要統計各種網路通訊協定的資料包數量。★版本1假設一開始只需要處理HTTP和FTP兩種協議。有些同學不假思索,立即會聲明如下兩個整 數用於統計:int nCntHttp = 0;int nCntFtp = 0;猛一看,似乎沒啥問題。但是,如果需求發生變更,
Time of Update: 2017-02-27
說明:做了個計算機,本來是要上傳整個項目的,但突然發現不能上傳資源了,就貼出來 演算法部分的代碼,大家多多指點啊,呵呵,比較難讀,以後再上傳整個項目,呵呵//轉換,供乘法部分調用int turn(char s[], int num[]){ int i = 0, len, j; while(1) { if(s[i] == 0) break; else if(s[i] == '-' || s[i] == '0') i++; else break; } //i指向第一個非零數字 for (j =
Time of Update: 2017-02-27
最近突然對boost發生了興趣,但是boost安裝非常麻煩,網上介紹的方法大 都不全面,搜到了一篇關於在其它編譯器安裝boost的方法,試著改為 C++Builder2007適用的方法和大家分享,發布這篇文章之前只做過簡單測試,如 有問題,請指出。安裝時我的電腦只安裝了CodeGear RAD Studio2007, 沒有安裝VS等其它編譯工具,如果你的電腦同時安裝了其它編譯工具,你需要謹 慎,當然是否有問題我也不知道,你自己研究吧,把最後的結果貼出來大家分享 。1.相關網址
Time of Update: 2017-02-27
與記憶體泄露相比,C++最令人頭痛的問題是記憶體越界,而記憶體越界很多情況下是由於懸掛指標引起的。假設一個指標變數:Object * ptr;使用ptr時,我們除了要判斷ptr是否為0以外,還要懷疑它指向的對象是否有效,是不是已經在別的地方被銷毀了。我們希望當它指向的對象被銷毀時,ptr被自動置為0。顯然,C++沒有這種機制,但是,可以藉助於boost::weak_ptr做到這一點。inline void null_deleter(void const *){}class X{private:
Time of Update: 2017-02-27
通過OpenProcess(PROCESS_ALL_ACCESS,FALSE,dId)擷取ID較低進程的控制代碼時可能會得到錯誤碼,這些進程都是保持系統活動的系統服務。一個普通使用者進程不允許執行針對系統服務的所有操作。如果一個程式意外終止了一個系統服務,那麼整個系統都將崩潰。因此,一個進程只有擁有確切的存取權限才會有適當的特權
Time of Update: 2017-02-27
矩陣:矩陣是數值程式設計中經常用到的數學模型,它是由 m 行和 n 列的數值構成(m=n 時稱為方陣)。在用進階語言編製的程式中,通常用二維 數組表示矩陣,它使矩陣中的每個元素都可在二維數組中找到相對應的儲存位置 。然而在數值分析的計算中經常出現一些有下列特性的高階矩陣,即矩陣中有很 多值相同的元或零值元,為了節省儲存空間,需要對它們進行"壓縮儲存 ",即不存或少存這些值相同的元或零值元。操作:可以對矩陣作 加、減、乘等運算。儲存壓縮目標:節約儲存空間壓縮
Time of Update: 2017-02-27
#include < string .h >void main(){string aaa = " abcsd d " ;printf( " looking for abc from abcdecd %s\n " ,(strcmp(aaa, " abc " )) ? " Found " : " Not Found " );}不能正確執行,提示說是string
Time of Update: 2017-02-27
概要在介紹StdExt的時候,我曾經提到,STL設計精良,但是以下幾塊仍然設計不 足(或缺失):allocator(記憶體管理)string(字串處理/文本處理)parallel programming(並行編程)關於記憶體管理,我們已經說得很多了。這裡我們重點談的是字串處理/文本 處理相關的問題。本篇是《字串處理完整參考》這個系列的第一篇。曆史字串處理/文本處理是一個曆史悠久,並且相當複雜的一個話題。從簡單到 字串的比較(compare)、串連(concat),到複雜的文本編輯、Regex 、
Time of Update: 2017-02-27
【C++程式中具名管道通訊的實現】最近學習c++中,試手過程選擇實 現一個程式與被注入程式互連的工具,感覺如果是電腦本地的通訊使用socket 似乎有些不太理性,俗話說“殺雞焉牛宰牛刀”,所以使用偉大的 google找到了更適合輕量級程式通訊的內容,即下面所要說的:“管道 ”。首先按照國際管理,介紹下c++實現“管道” 的幾 個核心函數;CreateNamedPipe( //伺服器端建立