Time of Update: 2018-12-05
今天寫程式時想用智能指標與vector容器一起解決指標數組的成員管理問題。在我的程式中我用到了多個指標容器,這樣就導致了一個問題,這些指標容器的清空非常繁瑣,我不能僅僅調用一次clear就能完成,我需要每次從容器中取出一個元素,然後釋放掉這個元素所佔的記憶體,之後再清除掉指標,然後再清空容器。我覺得很是麻煩,於是想將其改進,我不需要去管理容器內的這些指標,當容器被清空或者銷毀時,我希望這些元素所佔的記憶體也都被釋放掉。於是,我想到了智能指標,現將今天的整個過程記錄下來,以免日後再犯同樣的錯誤,同
Time of Update: 2018-12-05
理解虛函數( virtual function )的幾個關鍵點:1. 理解早綁定(early binding)、晚綁定(late binding)。所謂early binding:On compile time,就能明確一個函數調用是對哪個對象的哪個成員函數進行的,即編譯時間就曉得了確定的函數地址;所謂late binding:On compile
Time of Update: 2018-12-05
最近在使用COM的字串時,覺得_bstr_t的自動類型轉換非常有意思,故特來研究。下面是_bstr_t的一些用法:將char*/WCHAR*值賦給_bstr_tm_rst->GetFields()->GetItem(nCol)->Value = (_bstr_t)sValue;從_bstr_t返回char*/WCHAR*值strcpy(sValue, (char*)(_bstr_t)vValue);wcscpy(sValue, (WCHAR*)(_bstr_t)vValue);
Time of Update: 2018-12-05
我們知道C++支援的虛函數是通過為每個類提供一個虛函數來實現的,它的記憶體狀態究竟是怎樣的呢?首先我們實現兩個擁有虛函數的類:ClassA和ClassB,其中ClassB是ClassA的衍生類別,具體實現如下://ClassA#include <iostream.h>#include <stdio.h>class ClassA{public: ClassA() { x=0; y=0; }
Time of Update: 2018-12-05
最佳化C代碼常用的幾招在效能最佳化方面永遠注意80-20原則,即20%的程式消耗了80%的已耗用時間,因而我們要改進效率,最主要是考慮改進那20%的代碼。不要最佳化程式中開銷不大的那80%,這是勞而無功的。第一招:以空間換時間電腦程式中最大的矛盾是空間和時間的矛盾,那麼,從這個角度出發逆向思維來考慮程式的效率問題,我們就有瞭解決問題的第1招--以空間換時間。比如說字串的賦值:方法A:通常的辦法#define LEN 32char string1 [LEN];memset (string1,0
Time of Update: 2018-12-05
cast是用於類型轉換的,C++中常用的cast有以下幾種:1.static_cast:用於繼承中,子類和父類之間的轉換,用作將子類轉換為父類舉例:Child*ch = new Child();Father* fa =
Time of Update: 2018-12-05
#include <iostream>using namespace std;void fun_1(int n){if(n<2){cout<<n;}if(n>=2){fun_1(n/2);cout<<n%2;}}void fun_3(int n){switch(n){case 10: cout<<"A";break;case 11: cout<<"B";break;case 12:
Time of Update: 2018-12-05
C++中char*\wchar_t*\string\wstring之間的相互轉換:#ifndef USE_H_ #define USE_H_ #include <iostream> #include <windows.h> #include <string> using namespace std; class CUser { public: CUser(); virtual~ CUser();
Time of Update: 2018-12-05
【我解C語言面試題系列】006 按位反轉整數問題按位反轉整數問題 Write a C function to swap the bits of a unsigned int so that its bits become the mirror image of the char. MSBs become its LSBs, e.g. 0111100011110111 binary should become 1110111100011110 binary.方法一:(最最容易想到的辦法)
Time of Update: 2018-12-05
【C語言庫函數原始碼】【本程式在Dev C++ 4.9.9.2 下編譯通過】#include <stdlib.h>/* 這個函數調用的是庫函數中的 strtol()函數,關於這個函數的 原始碼後面將會給出。*/int my_atoi(char *str){ return (int) strtol(str, NULL, 10);}/* 下面的兩個函數沒有調用strtol()函數, 而是直接給出了該函數的實現。*/int my_atoi01(const char
Time of Update: 2018-12-05
【我解C語言面試題系列】007 運算子優先順序問題運算子優先順序問題給出下面程式的運行結果:int main(){ if( 0 & 1 == 0) printf("0 & 1 == 0/n"); else printf("0 & 1 != 0/n"); if( 0 & 1 != 0) printf("0 & 1 != 0/n"); else printf("0 & 1
Time of Update: 2018-12-05
【C語言庫函數原始碼】【本程式在Dev C++ 4.9.9.2 下編譯通過】double my_ceil(double x){ register double ret; unsigned short int temp1, temp2; __asm__("fnstcw %0" : "=m" (temp1)); temp2 = (temp1 & 0xf3ff) | 0x0800; /* rounding up */ __asm__("fldcw %0" : :
Time of Update: 2018-12-05
【C語言庫函數原始碼】【本程式在Dev C++ 4.9.9.2 下編譯通過】double my_pow10(double x){ register double ret, value; __asm__( "fldl2t;/n/t" "fmul %%st(1);/n/t" "fst %%st(1);/n/t" "frndint;/n/t" "fxch;/n/t" "fsub %%st(1);/n/t"
Time of Update: 2018-12-05
【C語言庫函數原始碼】【本程式在Dev C++ 4.9.9.2 下編譯通過】/* 對兩個整數相除,傳回型別為div_t, 在stdlib.h標頭檔中定義。 typedef struct { int quot; int rem; } div_t; quot儲存的是商(quotient)。 rem 儲存的是餘數(remainder)。 演算法和ldiv()函數非常類似。 這個函數並不進行分母(除數)為0的檢測。*/ typedef
Time of Update: 2018-12-05
【C語言庫函數原始碼】【本程式在Dev C++ 4.9.9.2 下編譯通過】/* Compares count bytes of memory starting at buffer1 and buffer2 andfind if equal or which one is first in lexical order. 比較記憶體地區buffer1和buffer2的前count個位元組。當buffer1 < buffer2時,傳回值 < 0;當buffer1 =
Time of Update: 2018-12-05
很多C++書籍都鼓勵我們使用vector替換數組,使用string替換傳統的字串,我一直相信可以這麼做,而且這麼做了以後,會減少工作量,提高效率。知道是一回事,實際操作起來是一回事,每次使用string的時候總會有這樣那樣的問題。我在想,之所以Accelerated
Time of Update: 2018-12-05
幾乎可以肯定80%的程式員都用過cat程式,它是Linux中用來串連多個檔案的命令,自己類比寫這樣一個小程式,將會是一次不錯的學習,Cat支援有參數和無參數兩種方式,如果沒有參數,將使用標準輸入和輸出實現,如果有參數將會把參數裡指定的檔案連結並在標準顯示上顯示,那麼我第一步是做什麼呢?當然是實現從一個指定的輸入資料流讀取字元顯示在指定的輸出資料流上,代碼大致如下://從src中複製內容到destint fileCopy(FILE *src,FILE *dest){ int c;
Time of Update: 2018-12-05
搞了這麼個無聊東西,可以用來做杯墊。我想我肯定是繡十字繡的人們中C++最好的,哈哈。另外感慨一下,上學項目用Java,找工作學習JS,最後入職做C++。語言只是個工具啊!始終沒搞明白Visual Stdio上面怎麼畫圖,於是用字串打出來了。#include <iostream>#include <set>#include <list>#include <ctime>#include <cstdlib>#include
Time of Update: 2018-12-05
Vector是一種類模板..使用方法為vector<資料類型> 變數名;如vector<int> vi;可有多種方式vector<int>vi; 檔案類型為int的對象.初始化值為空白vector<int>vi(v2); v2是vi的副本vector<int> vi(10); 儲存為int的對象.初始化值為10vector<int>vi(n,10); 儲存n個值為10的元素用push_back像vector壓入值;
Time of Update: 2018-12-05
C++標準規定了每個基本類型的最小儲存空間,但它沒有阻止編譯器使用更大的儲存空間。 int一個機器字長,long一個或兩個機器字長。0 1 0 1 00 1 01 1 0 1 01 0 11 0 0 0 11 0 10 0 0 0 01 1