腳本的可控程度,復雜度等等,更容易影響語言的選擇.
form中有幾個屬性可調。
1 有屬性用于確定form顯示在哪個屏幕上
2 有屬性用于確定form顯示在哪個坐標上
3 有屬性用于確定form是居中在哪個屏幕上
“確實只測試過第一個例子”
--真的測試過了嗎?怎么測試的?
for(i = 1;i < N;i ++)sum += i;
這個N到底加了沒有?
從版本號也能看出來。asio目前只有0.3.9,還遠未到開發完整。
因此,成熟自然也遠未到。
第4種雖然可行,但還是不用為好。以免某些編譯器不支持,同時也增加代碼理解難度,而且在更復雜的情形中,這一招也無法解決問題。
還是第5種比較合適。
re: 去掉string里面的所有空格 沐楓 2007-11-30 16:16
優化工作完全交給編譯器來做
--呵呵,這不是我說的,是你說的。我也不完全認同。
優化的問題太復雜了,不可能討論的出來結果的,因為它與實際情況關系太密切了。
至于返回引用,的確是我看錯了。不好意思。
用flashget或迅雷之類的下載工具,可以從微軟站點全速下載的。
re: 去掉string里面的所有空格 沐楓 2007-11-30 11:37
@owlcn
就好象返回局部變量的指針一樣。這樣,有可能你可以運行,也有可能在某些時候就不能運行。。。
re: 去掉string里面的所有空格 沐楓 2007-11-30 11:36
效率高不高不是你認為不認為的問題。
而是實際使用環境造成的。
現在的編譯器已經不是當年的編譯器了。你要是沒有把編譯器的各種優化功能用好,就很難說哪種方法在哪個使用環境下,誰的效率更高。
就拿VC來說吧。VC除了各種編譯時和鏈接時的優化外,還有一個按配置優化的功能。也就是讓你的程序在運行中收集信息,經過一段長時間的使用以后,將收集的信息,讓編譯器根據這個信息對代碼重新進行優化。這種優化才是真正的根據實際需要優化的。
re: 去掉string里面的所有空格 沐楓 2007-11-29 13:32
博主太恐怖了,居然敢返回string&.
re: 去掉string里面的所有空格 沐楓 2007-11-29 13:19
str.erase(remove_if(str.begin(), str.end(), isspace), str.end());
喏,還是很容易,一句就搞定了。
re: 漢語編程++ 沐楓 2007-10-18 19:41
想不到這個東西這么值錢,各位兄弟,趕緊行動起來,撈錢去嘍
re: 漢語編程++ 沐楓 2007-10-18 19:40
漢字激光照排系統 這個名富其實。
但是其它幾個居然敢跟它排在一起.....
re: 漢語編程++ 沐楓 2007-10-17 20:40
說實話,易語言還是有可取的地方,就是集成開發環境將程序流程和注釋做的很醒目很好看。
re: 從賦值到初始化 沐楓 2007-10-06 23:10
@空明流轉
我也用C#的啊?可是怎么不知道c#居然有構造函數多態行為。
你可能是指從一個構造函數調用另一個構造函數吧。
C++將會在下一個標準中增加這個功能。
re: 從for到foreach 沐楓 2007-09-27 22:53
@missdeer
好象、可能,這個說的很不地道。
性能的確會稍差,但差的是常數級別。循環體內是不差的。也就是說,大多數情況下可以忽略。
@夢在天涯
有更多的參數支持。但默認只支持10個以內。
需要更多的參數,要修改源代碼中的一個宏定義。我以前曾看過,代碼中有50個以內的參數定義預留。
re: 從for到foreach 沐楓 2007-09-27 16:12
@danielwyo
姓林的重名的實在是沒有辦法避免,我周圍常能找到重名的。更何況拼音。
---
上面的例子實在是簡單,因此,還不覺得那個iterator循環難看到哪去。一旦復雜度提高了,再那么寫就很不順眼了。
既使用foreach,也頂多改善一些罷了。
倒是對于.net引入的LINQ語法,很是向往。SQL當初面世的時候,曾被推寵,但直到今天也僅用于數據庫。真正開始在一般的程序設計上普及,看來看去也只有LINQ了。
象上面的例子,用C#3.0寫就是:
m_vecData
.Where(item => !item.IsBusy())
.All(item => item.DoSomeThing(param));

m_vecData.each {|item| !item.IsBusy() and item.DoSomeThing(param)}

re: 從for到foreach 沐楓 2007-09-27 15:13
并非完全要期待C++0x,那玩意兒至少要2年呢。
主要是為了希望能提高c++代碼的可讀性。
10多年前,剛學習C++的時候,為其傾倒,首要的,也是它在語言級上支持類,使得數據與算法的封裝變得直觀。
后來又加上函數重載和操作符重載,使得表達式變得簡單清晰。
再后來,模板的出現,使得消除重復代碼的同時還可以得到類型安全的保證。
這一切都是喜歡C++的理由。
然后,最終發現,這一切也變成容易寫出壞味道甚至難以維護的代碼的禍首。C++語法太過于低級,沒有更高一級的抽象,造成了對很多人最終難學難用難看的印象和后果。
既然無法從語法級別上進行改進,那就只好從程序庫中補充。因此,象BOOST等一系列的庫,都在這上面花了不少力氣。有許多人說這些庫用的“技巧"旁門左道,因此而抵制。事實上,它們只是為了能夠讓別的人不需要用很深刻的技巧,而打造了一批讓我們可以很順手使用的程序庫。
foreach 如此,format和assign如此,lambda,functional,bind,xpressive 等等,無不如此。
正是這些庫能簡化并提高程序設計的效率和可讀性,才有了C++0x的提案和實踐,也才有了C++語言的進化。
re: STL問題系列一 沐楓 2007-09-14 17:20
關于 < 的比較
你有沒有注意到,大多數的STL算法,都只需要傳進去一個比較函數就可以了?
默認情況下,傳進去的就是 < 比較.
那么,如果你要比較 a == b 怎么辦?
只有 !(a<b) && !(b<a)了.
所以,并非是說 ==的作用要小于<,而是條件所限.既然一個比較就可以了,總不能讓你提供一大堆的比較函數吧?
re: STL問題系列一 沐楓 2007-09-13 22:53
1、《C++STL 中文版》第一章課后習題:1-4、解釋為什么在所寫算法中使用其他種類的迭代器,而不是隨機存取迭代器?1-5、解釋為什么寧愿定義一個僅能通過迭代器來存取的數據結構,而不是讓他可以被隨機存取呢?
>>
1-4,并不是說不能使用隨機存取迭代器.比如sort就是使用隨機迭代器.設計一個算法,要選擇哪種迭代器,是要看具體什么算法.如果前向能滿足,就選前向,否則才考慮雙向,最后再考慮隨機.
1-5,問題與1-4是一致的.這里也不是寧愿不寧愿的問題.不同的數據結構有不同的目的.沒有特別的要求.這兩個題稍有誤導.主要是STL中的算法基本上都是通過迭代器存取.因此,符合迭代器的結構,就可以直接使用上這些算法.接口也統一,設計也清楚.
2、《C++STL 中文版》迭代器部分一直介紹輸入、輸去、前向、雙向、隨機迭代器,然而我以為只要以<iterator>建立的對象就具有隨機迭代器的功能,為何討論前向、雙向呢?
>>
迭代器是一種存取容器數據結構的方式.并不是所有的容器都可以直接支持隨機訪問的,或者說,用隨機訪問效率非常低下.比如鏈表.(雙向鏈表和單向鏈表等)
3、從《C++STL 中文版》第一章后面的習題看前向、雙向、隨機迭代器從性質和條件上有較大差別,請問這在深層上如何理解呢?
>>
顯然,前向指只能向從前向后依順序訪問(如單向鏈表)
.雙向指可以向前,也可以向后依順序訪問(如雙向鏈表)
.隨機,則是可以隨機訪問容器中的任何一個元素(如數組).
4、《C++STL 中文版》第二章習題:2-3“當T和U中有一個是const類型時,我們可能需要經常構造一個pair<T,U>對象。下面的定義是否可以達到這樣的效果?如果不可以,請說出你的理由。
template<class T,class U>inline pair<T,U> make_pair(T& x,U& y)
{return (pair<T,U> (x,y));}”
>>
這個
這樣的效果是什么效果?是指能不能構造成功?當然可以構造成功啦.例如:int a=2,b=4;pair<const int, int> c(make_pair(a,b));
5、《C++STL 中文版》2-4“請描述出一種可能的編碼情況,使得表達式 x.first < y.first ||
!(y.first < x.first) && x.second < y.second 并不等同于 x.first < y.first || x.first == y.first && x.second < y.second。”
>>
沒看過這本書.不明白要求什么寫哪部份的編碼.單從表達式來說.
隨便寫一個不符合要求的operator == 就好了(比如operator==返回<的結果).
6、STL在他的文件中定義了指針和引用,但同時還總是定義常指針和常引用,為何兩者必須分開實現呢?
>>
常指針和指針...這指的是typedef嗎?typedef談不上實現不實現的吧.只不過是一個typedef而已啦.C++的typedef并不是一個真正的類型,只是類型的別稱而已.
7、《C++STL 中文版》第四章:4-6“寫出一個分配器,它將對象存儲在一個磁盤文件中,并且維護一個小小的高速緩存來存儲程序內存中的有效對象。”
>>
這個...為什么不自已試著寫寫呢.
8、《C++STL 中文版》第四章:4-7“在那種情況下,分配器應該以與模板類allocator不一致的方式來定義成員函數construct和destroy?”
>>
allocator的construct是用placement new來實現的.construct的目的就是用于調用構造函數.在C++中,似乎只有用placement new的方式來手工調用構造函數.不一致的話,是不是指不用調用構造函數,或是有特別的調用方式?想不出來可以不用調用構造函數的實現或別的調用方式.
或者是不一致的方式另有所指?
9、<algorithm>文件中sort_heap函數功能:void sort_heap(RanIt first, RanIt last)重排由區間[first,last)中的迭代器指定的序列,產生一個按 operator <排序的序列。但是最初的序列也必須是一個同樣按 operator < 排序的堆。這樣看,那該函數的實際意義呢?
>>答:
堆排序.按<排序的堆,并不等于整個序列是按<排好序的.例如:( 9 6 8 4 1 5 7 3 2 0 )就是按<排好序的堆.但按<排好序的序列是(1 2 3 4 5 6 7 8 9)
re: STL問題系列一 沐楓 2007-09-13 21:48
這個不要放在首頁吧...
什么會自已寫分隔函數呢?
c庫就有一個strtok挺好的。
呵呵,不用擔心,C++0x已經確定了這個特性,就是>>中間不需要空格。
新的g++和vc9都已經支持了這個特性了。
re: File I/O 沐楓 2007-08-14 00:48
其實,這個功能,VisualStudio的C++編譯器已經提供了。
/FI[ ]pathname
此選項使預處理器處理指定的頭文件。此選項的作用與在命令行上、CL 環境變量中或命令文件中指定源文件,并同時在每個源文件的第一行上的 #include 指令中用雙引號指定該頭文件相同。如果使用多個 /FI 選項,將按 CL 處理文件的順序來包含這些文件。
在 Visual Studio 開發環境中設置此編譯器選項
打開此項目的“屬性頁”對話框。有關詳細信息,請參見設置 Visual C++ 項目屬性。
單擊“C/C++”文件夾。
單擊“高級”屬性頁。
修改“強制包含”屬性。
re: 用c++,寫小型病毒 沐楓 2007-08-02 11:47
joker
re: C++指針探討 (四) 函數對象 沐楓 2007-07-21 23:07
@pass86
差太多了。
re: C++高效編程忠告 沐楓 2007-07-20 12:00
@金慶
就是必須的,所以才是一種妨礙。
目前C++有3種編程:c, 類, 模板。
其中,頭文件對于c來說,并不成問題,甚至還帶來許多便利。
但是對于類,和模板,特別是模板來說,麻煩就大了。
對于類來說,封裝性和實現隱藏是一個很重要的概念,但大多數情況下,許多人都不容易做到這一點。.h文件中會有許多私有的數據成員,甚至還有不少的函數實現(如inline函數),從而對封裝性和實現隱藏造成破壞,造成編譯依賴,進一步造成編譯器的復雜度提高。最終為了避開這些問題,將會造成庫設計要求的提高。
至于模板風格的編程就更不得了,目前幾乎沒有支持分離模板的編譯器。況且即便分離了,又能怎么樣?最終的結果是,大多的模板風格的程序,所有的代碼都在.h文件中,.cpp反而只剩了一句話:#include "xxx.h",沒了。
re: C++高效編程忠告 沐楓 2007-07-19 19:21
閑來無聊,無聊一下:
2 頭文件的作用
這是由于歷史原因造成的。
頭文件主要用于存放接口聲明,以便不同的c文件共享函數聲明。
到了c++中,已經造成一種妨礙了。
3 * & 的位置
這個位置放哪,雖然要緊,但更要緊的是,遵守一個變量一行定義。這樣就不會出現錯誤,也很好讀。如:
int * i;
int j;
4 if
仍然是歷史原因造成的。c標準中沒有真正的bool類型(c++98和c99加了),而是用int來代替,這就造成了麻煩。所以新寫的程序要避免使用BOOL,而用bool來替代。
如果是舊標準的編譯器,仍然要注意BOOL其實是int這個要點。
5 const #define enum
這幾個各有用途,有時候也不能互代。使用時,優先順序 enum const #define。看具體要求,不一定非要怎么怎么樣。
6 參數傳遞
用指針或用引用,倒不定要要爭個誰好誰壞。
實際上,用指針還更容易讓人明白傳進去的是指針。而引用則不然。引用的引入,在c++中是為了解決運算符重載的問題。
不過,不管用哪個,倒是建議優先采用 const T* 或const T&,這種常量指針或常亙引用。這不僅關系程序優化,也關系到代碼的質量。
8 memcpy
除非沒有類似的庫函數,否則不要重新寫一個。要知道,絕大多數編譯器會對這些庫函數作特殊優化。這是手工編碼無法做到的。
11 字串
建議不要使用strcpy,strcmp類似的函數,應該改為strncpy, strncmp等函數。目前新型的編譯器會認為strxxx函數是非法的(被淘汰的),建議用strnxxx,或者編譯器提供的更安全的版本。
13 指針的大小
與編譯器及系統平臺有關。大小從2/4/8/16各種可能性都有.不要認死了。
14 關于new/delete 與malloc/free
你用了類似class的關鍵字后,就注定不兼容于c了。因此,用了c++的東西,就不要去用mallco/free,除非特殊情況。
同理,不使用c++的東西,也決不要去用new /delete.
否則,你的跨語言或跨平臺的想法就打水漂了。還容易出錯。
15 const 函數
const不一定只能引用const成員。它可以使用任何成員,只是默認情況不能改變成員的值而已。如果成員被定義為mutable(c++98),則不限制。
18 #ifdef
說的太絕對了。而且沒有任何說明如何做。
事實上#ifdef能做的事還是挺多的。
re: 8行撰寫的一個備份工具 沐楓 2007-07-19 18:47
at + rar 簡單配置一下就可以代替程序了。
或者是.bat + rar.exe 都行的通,去寫程序,反而不靈活。
re: 消除障眼法-一個編譯錯誤 沐楓 2007-07-19 10:14
@夢在天涯
一致性是很重要的。沒了一致性,不但這個庫函數是很難用的,而且也是很容易出錯的。
re: do...while(0)的妙用 沐楓 2007-07-04 11:07
比如文件, 數據庫鏈接,網絡連接等等這些都可以設計一個資源維護的guard來保護。
比如MFC的CFile就有這個功能。
re: do...while(0)的妙用 沐楓 2007-07-04 10:34
do{}while(0)
在于宏定義上的使用是無疑的。我在設計庫的時候,是常用的。
但是對于第一點,用于消除goto,舉的例子很不恰當。
而且,代碼中常常有一些循環語句。此時,從內循環是無法用break跳出到外循環,仍然得用goto,這樣,do while(0)就變得多余了。
用auto_ptr等自動守護(guard)機制是更好的選擇:
bool Execute()
{
// 分配資源
auto_ptr<int> p = new int;
// 執行并進行錯誤處理
if(!func1())
return false;
if(!func2())
return false;
if(!func3())
return false;
//...
return true;
}
re: FreeType2研究 沐楓 2007-05-22 15:51
你得到一個“口”,估計是字體文件沒有對應的字符。
你可以用 simsun.ttf試試。
re: 發現自己土了[未登錄] 沐楓 2007-05-04 11:36
博主又錯了。這跟土不土沒有關系。
1. boost::bind并非無限參數。一般不會超過20個。
2. 既使沒有boost::bind,std::bindxxx和std::mem_funxxx配合,也能達到同樣的效果。雖然參數不能超過2個。
3. 即使如此,自已去做一次,也有助于對C++機制的了解。
4. 如果你有需要什么功能,那么可能已經有現成的實現了。就看你是否有找到。
re: 命令行界面VS圖形界面 沐楓 2007-04-29 19:24
各有其應用范圍,不要厚此薄彼。擺正心態,根據實際情況,適當選擇,或同時提供。
re: 計算Int最大最小值 沐楓 2006-12-25 11:56
為啥用函數呢...
const int INT_MAX = ~0;
這樣不挺好的。
re: 生成無重復的隨機數 沐楓 2006-12-05 18:23
你的方法1)因為需要保存隨機數歷史數據,因此仍然是需要空間消耗的。而且空間消耗與方法2)比起來,沒區別。
--
至于方法2)的交換方法,VS2005中的std::random_shuffle函數就是這么做的。
re: FreeType2研究 沐楓 2006-11-11 12:08
漢字碼是Unicode。用相應漢字的Unicode編碼,就可以取到了。
re: 百度公司來科大的面試題 沐楓 2006-11-10 10:54
27cm,對半后是13.5cm.
1. 這樣,離最近末端最大距離是11cm,因此,最小時間是11秒。
2. 離最遠的末端最大的距離是27-3=24cm,因此,最大時間是24秒。
對不對,請指教?
re: 百度公司來科大的面試題 沐楓 2006-11-10 10:25
呵呵,確實是智力題啊。
最小時間很快就出來了。
最大時間,剛一開始給矇了。然后看到提示,就霍然開朗了。
然后果然心算就出答案了。
--
問題是心算出答案的題目,如果用程序實現,那不變成了直接輸出答案了,這如何寫算法呢?太簡單的算法,不如不寫。寫復雜了,就不是最優算法了。
re: FreeType2研究 沐楓 2006-11-08 23:48
以前有用過ft2,但是發現,在簡體中文windowsxp下面,顯示繁體中文時,顯示位置會不對。
re: 關于String類的筆試題及解答 沐楓 2006-10-27 10:23
operator=存在一個異常安全問題。
假設,執行到new char[]時,發生異常,這時,原有的內容已經被delete掉了。這時,operator=扔出異常,同時,原有的對象已經不能用了。
re: Return of Turbos 沐楓 2006-09-08 08:54
我裝好了。試用了一下。
感覺上,就是bds2006的sp.
IDE仍然還是bds2006的那一套(bds4.0),只不過,bds2006帶的C++Builder是preview,這回是正式版。
并沒有值得紀念的新特性在內。
不過,如果品質有提升,那也是挺不錯的了。畢竟現在也還是2006年啊。
內置式new,不是一個好的(甚至是不正確的)譯法。
曾有人提過:就地創建。但有人不喜歡“就地”兩字。
所以,不喜歡的話,如沒有適當的譯法,還是用placement new這樣的原文比較好。
re: 關于String類的筆試題及解答 沐楓 2006-07-14 09:24
operator = 不是異常安全的。
string不需要operator()操作。
String str1 = str;//調用拷貝構造函數
這個聽說是C++標準規定的。
re: 遞歸和遞推的非嚴格概念解釋 沐楓 2006-07-10 09:14
有遞推這種算法形式嗎?還是說,只是為了與遞歸對應,不是遞歸就是遞推?
文中的解釋,覺得是從算法上來說明。其實,遞歸,應該是一種計算機的算法表達形式,它指的應該是有限制的直接或間接重復調用自身的一種子程序。