Time of Update: 2018-12-05
本來不想說的,這其實是一個很基礎的問題,但是這兩天調試產品的bug的時候,卻發現是assert使用不當的問題。當然問題代碼不是我寫的。 這個bug在debug版本裡是不出現的,但是在release版裡出現。原因就在於有一句很重要的函數調用被放在assert裡面了。assert的願意是檢查這個函數調用的傳回值。但是寫代碼的人卻忽視了assert的副總用,結果導致release版裡bug出現了。這個bug從重現到調試,花費了我3天時間。 此時正確合理的做法是使用verify、verify裡的運算式在
Time of Update: 2018-12-05
上周末股指期貨推出,這一直是市場上認為的大利好啊。 於是開盤,大盤高開在3300,券商股,期貨股全部漲停。。。 未料此後大盤一路向下,下跌100個點。形成了一根大陰線。可憐了那些早盤追高的散戶們,這一下又被套了。 再一次證明了某些利好會見光死,從而變成一個陰謀。這又讓某些人大賺一筆。 還是那句話,股市有風險,入市需謹慎。一般的早盤變數太多,急著進去反而不好。除非那些技術過人的。 而我,吃了幾次虧之後,也漸漸選擇在尾盤入場了。這樣有安全邊際。第二天一看大勢不妙,立刻就撤。 千萬別被套,尤其是滿倉被
Time of Update: 2018-12-05
自己工作中寫的一個文檔。希望能對有需要的人有所協助。 How to generate pdf file with Doxygen Table of contents
Time of Update: 2018-12-05
原始碼為你揭示一切。c++世界很無奈的一點是,很多東西你必須得看原始碼才知曉其中的秘訣。因為技巧太多了。 template<class _Ty> class auto_ptr;template<class _Ty>struct auto_ptr_ref{ // proxy reference for auto_ptr copying explicit auto_ptr_ref(_Ty *_Right) :
Time of Update: 2018-12-05
在windows平台下,有一個很方便的宏: #pragma once指定當前檔案在構建時只被包含(或開啟)一次,這樣就可以減少構建的時間,因為加入#pragma once後,編譯器在開啟或讀取第一個#include 模組後,就不會再開啟或讀取隨後出現的相同#include 模組. 另外,還可以用條件編譯語句來實現:#ifndef "XX_H"#define "XX_H" <標頭檔定義本文>#endif 顯然後者的移植性更好一點。
Time of Update: 2018-12-05
條款23:考慮用已序vector代替關聯容器當需要一個提供快速尋找的資料結構時,很多STL程式員立刻會想到標準關聯容器:set、multiset、map和multimap。直到現在這很好,但不是永遠都好。如果尋找速度真得很重要,的確也值得考慮使用非標準的hash容器。如果使用了合適的hash函數,則可以認為hash容器提供了常數時間的尋找。(如果選擇了不好的hash函數或表的太小,hash表的尋找效能可能明顯下降,但在實際中這相對少見。)對於多數應用,被認為是常數時間尋找的hash容器要好於保
Time of Update: 2018-12-05
條款25:熟悉非標準散列容器STL程式員一般用不了多久就開始驚訝,“vector、list、map,很好,但是散列(hash)表在哪裡"?唉,在標準C++庫裡沒有任何散列表。
Time of Update: 2018-12-05
這是一個很常見的筆試題目。給出我的解法: 演算法思路: 該演算法需要一個bool值,用來防止word被重複計算,flag初始值為假。遍曆該字串,如果字元為字母或數字(組成單詞的一部分),如果flag為假,則結果加1,並將flag變成真。如果字串為分隔字元,則把flag設為假。//判斷是否為分隔字元 bool IsSeperator(char c){ switch(c) { case ' ': return true; break; case ',':
Time of Update: 2018-12-05
相信大家對優先隊列不陌生。STL提供的PriorityQueue屬於容器適配器,底層預設用vector容器來實現。實現原理是在用vector裡構造一個Heap(堆),堆一般是用數組來儲存的。下面是一個使用有限隊列的例子,用來實現一個錯誤關聯器,總是把優先順序高的錯誤放在最前面。#include <string>#include <queue>#include <ostream>#include <stdexcept>// this class
Time of Update: 2018-12-05
What Exporting ReallyMeans (dll匯出的本質)The only truly interesting thing I introduced in the previous section was the __declspec(dllexport) modifier. When Microsoft's C/C++compiler sees this modifier before a variable, function prototype, or C++
Time of Update: 2018-12-05
因工作上的原因,搜集了一些這方面的資料。深感搜集到這些資料的不易,因此拿出來和大家分享,希望能幫到大家一點點。 1. Vc列印Excel: 關於VC如何開啟一個excel,這方面的資料很多了,一般用的是OLE Avtive Control/假設當你開啟了一個excel檔案,並獲得了它的workbook的handle,相應的介面為: COleVariant covTrue((short)true); COleVariant
Time of Update: 2018-12-05
條款29:需要一個一個字元輸入時考慮使用istreambuf_iterator假設我們要把一個文字檔拷貝到一個字串對象中。似乎可以用一種很有道理的方法完成:ifstream inputFile("interestingData.txt");string fileData((istream_iterator<char>(inputFile)), // 把inputFile讀入 istream_iterator<char>()); //
Time of Update: 2018-12-05
關於STL容器,最令人稱讚的特性之一就是是只要不超過它們的最大大小,它們就可以自動成長到足以容納你放進去的資料。(要知道這個最大值,只要調用名叫max_size的成員函數。)對於vector和string,如果需要更多空間,就以類似realloc的思想來增長大小。這個類似於realloc的操作有四個部分:分配新的記憶體塊,它有容器目前容量的倍數。在大部分實現中,vector和string的容量每次以2為因數增長。也就是說,當容器必須擴充時,它們的容量每次翻倍。把所有元素從容器的舊記憶體拷貝到它的
Time of Update: 2018-12-05
手寫的,沒有經過最佳化。將整數轉換為相應的字串。注意INT64的最大值,以免溢出。 char* itoa_my(INT64 value, char *buffer, size_t size) { assert(buffer != NULL); assert(size > 1); size_t Len = 0; INT64 tempvalue = value; if (value < 0) tempvalue = -value;//
Time of Update: 2018-12-05
關於VC操作word和EXCEL的,其中有網上抄的資料,也有自己的理解和體會。1. 一般來說,VC操作word和EXCEL比較直接的方式是利用automation. 翻譯成中文就是自動化。你要做的第一件事情就是為你的工程添加操作word和EXCEL需要的標頭檔。方法如下: 對於VC6.0來說,開啟class wizard, 然後選中automation,彈出以下介面: 點擊 "Add Class"按鈕,會出現一個下拉式功能表,只有2項,然後選擇"from a type lib",
Time of Update: 2018-12-05
有時候我們要寫一些從數組的後面往前遍曆的程式,但使用的卻是正向迭代器。比如:typedef vector<int>::iterator iter; iter last=--a.end(); for (iter i=last-1;i>=a.begin();i--) { for (iter j=last;j>=i+1;j--) { if ( *i < *j
Time of Update: 2018-12-05
如何profile一個dll呢?有以下步驟。 1.) Delete the export (<lib>.exp) and lib file (<lib>.lib) for the library you want to check 2.) Tick in the settings dialog on the tab-page the checkbox "Enable profiling" 3.) Tick on the same tab-page the
Time of Update: 2018-12-05
Bjarne Stroustrup曾經用奇特的標題寫一篇文章,《Sixteen Ways to Stack a
Time of Update: 2018-12-05
老手,總會去到類似瓶頸的地方,每天上班下班,泡網泡論壇,渾渾噩噩。想再有寸進,總要下一些決心,今晚記下來以自律: 1.安靜的讀書 雖然書中的資訊比網路滯後,中文版的翻譯更再慢上一截。但書本的深度總結,比零零散散的網路資訊要深刻、完整而有條理得多。 還是那句,看書最好中文(翻譯太爛的除外)。 還是那那句,看書最好晚上,工作時間偷的或者零碎時間擠的,不適合。 架構師書單仍在繼續。 2.網媒只看深度文章 比如IBM
Time of Update: 2018-12-05
STL有許多比較對象是否有同樣的值的情況。比如,當你用find來定位區間中第一個有特定值的對象的位置,find必須可以比較兩個對象,看看一個的值是否與另一個相等。(operator==)。同樣,當你嘗試向set中插入一個新元素時,set::insert必須可以判斷那個元素的值是否已經在set中了。find演算法和set的insert成員函數是很多必須判斷兩個值是否相同的函數的代表。但它們以不同的方式完成,find對“相同”的定義是相等,基於operator==。set::insert對“相同