Time of Update: 2017-02-27
容器(container)的erase()函數, 是刪除一個元素, 會移動迭代器的指標, 指向下一個元素;迭代器(iterator)是一種指標, 賦值是傳遞的地址, 指向相同的元素;代碼:/* * test.cpp * * Created on: 2014.04.18 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <iostream> #include
Time of Update: 2017-02-27
本文分為兩方面一.Native C++調用Native C++ DLL 並測試回合時間二. 完全由C# 實現運算代碼 並測試回合時間詳細過程:一:至於如何擷取EfficiencyNativeCPPDLL.dll 和 EfficiencyNativeCPPDLL.lib 以及產生項目EfficiencyNativeCPPDLL本文講述在VS2010中本地C++調用C++類庫以進行效率測試1. 常見Win32控制台應用程式 ConsoleCPPInvokeDLL2.選擇下一步點擊完成就可以了3
Time of Update: 2017-02-27
RTTI, RunTime Type Information, 運行時類型資訊, 是多態的主要組成部分,通過運行時(runtime)確定使用的類型, 執行不同的函數,複用(reuse)介面.dynamic_cast<>可以 使基類指標轉換為衍生類別的指標, 通過判斷指標的類型, 可以決定使用的函數.typeid(), 可以判斷類型資訊, 判斷指標指向位置, 在多態中, 可以判斷基類還是衍生類別.代碼:/* * test.cpp * * Created on: 2014.04.
Time of Update: 2017-02-27
定義二進位變數:一般是以八進位或者十六進位來定義,八位元以0開頭,十六進位數以0x開頭例如int a = 0x80, 這裡的80隻能表示8個二進位位,它表示的是int的低8位,前面的24個二進位位補0,所以a = 128;也可以 a = –0x80, 此時a = -128;8進位同理需要注意的是:如果0x…能夠在整形內表示,則其預設是int,否則再看unsigned int能否表示,接著long long ,再接著unsigned long long
Time of Update: 2017-02-27
函數模板的傳回值也可以定義為模板參數(template parameter), 但是由於無法推導(deduce), 需要顯式(explicit)指定;由於顯式指定的順序是從左至右, 傳回值參數盡量放在左面,其餘函數參數可以通過傳入實參(argument)進行推導;也可以提供由其他參數推匯出的傳回值類型, 需要使用拖尾傳回型別(trailing return type);使用decltype()函數推導, 即"編譯時間定義的類型", 注意使用拖尾傳回型別時,
Time of Update: 2017-02-27
類模板的部分定製, 是指使用類模板的類型(T), 但是不同種類, 如左值, 右值等;類模板的部分定製, 和類模板定製相同, 都需要類名相同,參數相同;定製的形參(parameter)比原始模板(original template)更加匹配;類模板有部分定製, 但函數模板沒有, 函數模板只能是重載;類模板的定製成員, 類模板可以單獨定製成員類型, 使不同的執行個體化類, 使用定製的成員;代碼(部分定製):/* * CppPrimer.cpp * * Created on: 2013.12.
Time of Update: 2017-02-27
子運算式(subexpressions)的 資料驗證(data validation), 可以通過括弧"()"分解Regex的子運算式;然後使用下標標示符[], 輸出相應的子運算式, "0"代表全體, "1"代表第一個括弧, 依次遞加;通過對於問號項?是否匹配, 驗證Regex的匹配式;代碼:#include <iostream> #include <string> #include
Time of Update: 2017-02-27
在多重繼承中, 如果多個基類包含相同名字的成員函數, 則在衍生類別使用時, 容易發生歧義, 會導致出錯;解決方案是: 在衍生類別中重寫基類方法, 覆蓋原方法, 再指定基類範圍(scope), 確定使用那個基類的方法, 可以避免歧義;代碼如下:/* * cppprimer.cpp * * Created on: 2014.1.10 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include
Time of Update: 2017-02-27
虛繼承(virtual inheritance)的構造(construct)和析構(destruct)順序在多重繼承的時候, 構造順序是 虛繼承按順序優先, 再次是其他按順序, 由基類至衍生類別; 析構順序正好相反;代碼如下:/* * cppprimer.cpp * * Created on: 2014.1.10 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <iostream>
Time of Update: 2017-02-27
C++可以使用copy函數輸出容器(container)中的元素, 可以代替for迴圈.標頭檔:#include <algorithm>#include <iterator>格式:std::copy(cont.begin(), cont.end(),std::ostream_iterator<Type>(std::cout, " "));Type是需要輸出格式的類型, 如容器是vector<int>, 則Type是int.代碼:
Time of Update: 2017-02-27
解決的問題:我們PC用到的檔案系統,其實就是我們資料結構裡的樹形結構,我們處理樹中的每個節點時,其實 不用考慮他是葉子節點還是根節點,因為他們的成員函數都是一樣的,這個就是組合模式的精髓。他模糊了簡單元素和複雜 元素的概念,客戶程式可以向處理簡單元素一樣來處理複雜元素,從而使得客戶程式與複雜元素的內部結構解耦。將
Time of Update: 2017-02-27
橋模式,其作用就是讓抽象與實現相分離,讓兩者都能夠各自變化。舉例來說吧,畫圖,我可以畫矩形,圓,三 角形等等,在哪裡畫呢?我可以在pdf上畫,也可以在doc上面畫。畫什麼圖和在哪裡畫都是可以獨立變化的,此種情況就比 較適合用橋模式。就是說設計中有超過一維的變化我們就可以用橋模式。如果只有一維在變化,那麼我們用繼承就可以圓滿 的解決問題。我的圖形定義:#pragma once #include<vector> #include"ImpShape.h"
Time of Update: 2017-02-27
C++語言是案頭系統,尤其是系統軟體、大型應用軟體的主流開發語言。C++語言以其靈活性著稱,同時也更複雜。利用C++編寫健壯的代碼,更具有挑戰性。C++允許動態記憶體管理, 同時也容易導致更多和記憶體相關的問題。一般而言, 除了系統設計上的缺陷, 基於C++的軟體的缺陷和錯誤大部分都和記憶體缺陷(主要包括記憶體訪問錯誤和記憶體流失兩類)相關。
Time of Update: 2017-02-27
在初始化時保護資料如果你的資料需要在初始化時被保護,就不能再使用mutex了。因為在初始化結束後,這會引起不必要的同步。C++0x提供了很多方法來在初始化時保護資料。1)假定你的建構函式是用constexpr關鍵字聲明並且滿足常量初始化的條件。在這種情況下,一個靜態儲存區的對象在靜態初始階段會確保在其他代碼運行之前被初始化。對於std::mutex來說,這是最佳選擇,因為它消除了全域mutex初始化時產生紊亂的可能性。class my_class{ int
Time of Update: 2017-02-27
本文適合初級讀者Chuck Allison 是鹽湖城聖 Latter Day 教堂總部下耶穌教堂家族曆史研究處的軟體體系設計師。他擁有數學學士和數學碩士學位。他從1975年起開始編程,從1984年起他開始從事c語言的教學和開發。他目前的興趣是物件導向的技術及其教育。他是X3J16,ANSI C ++標準化委員會的一員。發送e-mail 到 allison@decus.org,或者撥打到電話到 (801)240-4510
Time of Update: 2017-02-27
Berkeley DB是曆史悠久的嵌入式資料庫系統,主要應用在UNIX/LINUX作業系統上。Berkeley DB的儲存的是key/value索引值對,可以理解為硬碟上的超級hash表。其可以管理256TB資料,而且能支撐幾千個並發訪問。目前Berkeley DB有C++版和Java版。所以,我們需要一個訪問的中間轉換,已經有人發布了C#的API。可以從 Berkeley DB for .NET
Time of Update: 2017-02-27
在系統開發的過程中,我們總是需要使用設定檔來儲存一些我們需要儲存的系統參數, 畢竟這是.Net時代,如果再使用註冊表那就顯得複雜了,畢竟操作註冊表的API並不是哪麼容 易理解的。所以在.net應用程式中,都預設出現一個App.Config(對於 Web應用程式 是Web.Config)我們可以將系統運行所需要的參數採用加密或者明文的方式儲存在這個檔案 中。但是當我們需要大量的,並且有一定邏輯結構的資料,希望也能夠儲存到設定檔中,
Time of Update: 2017-02-27
有多個結構一樣的Excel,帶複雜表頭需要合并為一個,且去掉多餘的表頭資料,可以用COM組件來讀取每個Excel表格的Range來合并到一個新的表格中。範例如圖有很多相同格式的表格,合并代碼如下:1.using System;2.using System.Collections.Generic;3.using System.Text;4.using System.Reflection;5.using Excel =
Time of Update: 2017-02-27
建構函式主要用來初始化對象。它又分為靜態(static)和執行個體(instance)建構函式兩種類別。大家應該都瞭解如果來寫類的建構函式,這裡只說下預設建構函式的作用,以及在類中保留預設建構函式的重要性。實際上,我說錯了。正確的說法是:以及在類中保留空參數建構函式的重要性。 我們來寫一個類A,代碼如下:view plaincopy to clipboardprint?public class A{public int Number; //數字public string Word; //文本}/
Time of Update: 2017-02-27
這裡介紹一種讀取XML文檔的方法,樣本中用的是 XmlTextReader 函數,每執行 Read() 一次,讀取一行.using System.Xml;public KSBMCONFIG ReadConfig(string XmlConfigFile){KSBMCONFIG _conf = new KSBMCONFIG ();try{// Open an XML fileSystem.Xml.XmlTextReader reader;reader = new