April
27th,
2004
Vector是STL容器裡面最簡單的一個,但是在資料結構裡面也鮮少有提到,但是在STL裡面卻時常利用這個資料結構。在這裡擺上我今天學習Vector的一些重點,讓大家分享一下。 **引用STLPORT版本 **:stlport4.0在bcb5.5上實做 **引用函示庫 **** **:位置: _您安裝STLPORT的位置stlportvector_ **實際運作函示庫 **:位置: 您安裝STLPORT的位置stlportstl_vector.h Vector是一個線性空間,但是為一個可以變動大小的線性空間,在宣告之後整個空間就像陣列(array)一樣為一個連續的線性空間,亦可以在上面進行類似Array的操作(比如說直接給值 a[i]=5 ; 或是直接顯示值 a[i]),而且Vector還可以隨意插入任何一個位置之中,並且使之後的元素均往後退一個(這個在array之中倒是需要實做上去加強的功能),並且最重要的是在Vector之中,他的位置是可以變動大小的。也就是若你一開始宣告的Vector大小為5,但是當你插入第6個元素的時候,整個Vector會自動變更大小到現在的兩倍(10個)。針對這個功能,所以Vector在使用上變的相當的方便,加上STL中泛型的設計概念使得Vector變得更強大,能解決的問題也就更多。整理Vector的特點如下: Vector特點 線性空間 與陣列操作相同 可以任意插入在任何位置 若是空間不足,將會自動擴大兩倍的空間 在今天的學習筆記之中,我附上一個自己的範例程式碼,方便各位如果要測試程式的時候一個參考依據: #include #include #include using namespace std; int main() { int i; vector iv(2,9); cout «“iv[1]=”«iv[0]; cout «“iv[2]=”«iv[1]«endl; cout «“size=”«iv.size()«endl; cout «“capacity=”«iv.capacity()«endl; cout «”—————————————–”«endl; iv.push_back(1); cout <<"iv[3]="<<iv[1]<<endl; cout <<"size="<<iv.size()<<endl; cout <<"capacity="<<iv.capacity()<<endl; cout <<"-----------------------------------------"<<endl; iv.push_back(2); cout <<"iv[4]="<<iv[1]<<endl; cout <<"size="<<iv.size()<<endl; cout <<"capacity="<<iv.capacity()<<endl; cout <<"-----------------------------------------"<<endl; iv.push_back(3); cout <<"iv[5]="<<iv[1]<<endl; cout <<"size="<<iv.size()<<endl; cout <<"capacity="<<iv.capacity()<<endl; cout <<"-----------------------------------------"<<endl; iv.push_back(4); cout <<"iv[6]="<<iv[1]<<endl; cout <<"size="<<iv.size()<<endl; cout <<"capacity="<<iv.capacity()<<endl; cout <<"-----------------------------------------"<<endl; for (i=0;i<iv.size();++i) cout <<iv[i]<<"--"; cout <<endl; iv.push_back(); iv.push_back(); cout <<"size="<<iv.size()<<endl; cout <<"capacity="<<iv.capacity()<<endl; for (i=0;i<iv.size();++i) cout <<iv[i]<<"--"; cout <<endl; vector::iterator ivite= find(iv.begin(), iv.end(),1); if (ivite) {iv.erase(ivite);} cout <<"-----------------------------------------"<<endl; cout <<"size="<<iv.size()<<endl; cout <<"capacity="<<iv.capacity()<<endl; cout <<*ivite; for (i=0;i<iv.size();++i) cout <<iv[i]<<"--"; cout <<endl; ivite= find(iv.begin(), iv.end(),2); if (ivite) {iv.insert(ivite,3,7);} cout <<"-----------------------------------------"<<endl; cout <<"size="<<iv.size()<<endl; cout <<"capacity="<<iv.capacity()<<endl; for (i=0;i<iv.size();++i) cout <<iv[i]<<"--"; cout <<endl; ivite= find(iv.begin(), iv.end(),7); cout <<iv.begin()<<"**"<<endl; cout <<ivite<<"=="; ivite= find(ivite, iv.end(),7); cout <<ivite<<"=="; iv.clear2();...
繼續閱讀
April
26th,
2004
最近許多BLOG都有這樣大串連的活動,就是讓你拿起手邊的書,將他第23頁打開,找到第五段話,寫在BLOG上面跟大家分享。我一開始看到這個活動的時候,起先也覺得只是一個大家一窩蜂的活動,但是隨著每個人拿起手邊的書寫下相關句子與心得的時候,閱讀的人也正在吸收著相同的知識,可能是很少的話語,卻能讓看的人有不同的吸收。
而活動詳細內容如下:
>
> 第二十三頁的遊戲:
一、找一本離妳最近的書。
二、翻到第二十三頁。
三、找到第五個句子(sentence)。
四、發表到妳的網誌、新聞台或是個人版,並附上這份說明。
(以上來自[微風夕語](http://bone.twbbs.org.tw/index.php)的〈[第二十三頁的遊戲:王惠玲‧她從海上來。](http://bone.twbbs.org.tw/Misc/1082472614.php)〉)
而我翻到手邊的書(11又1/2逆向管理)之中內容如下:
辛特-格吉說:『形成新發現的因素之一,乃是和別人觀察同樣的東西,但有不同的思考』
這句話主要是在講『識相曾似』(Vu ja De):「新角度看舊事物」的一種方式,這一段話主要是講到說,在企業經營時,隨著太多所謂的典範或是成規,反而使得管理者跳不出思考的框架,無法有創新的思維。如果無法跳出新的框架,不妨學習『識相曾似』將就的成規試著用新的觀點去觀察,或許創新也是這樣而來~
跟大家分享一下~~~~希望也能看見各位的~
繼續閱讀
April
21st,
2004
緣起
STL(
Standard Template Library)與泛行程式設計是一個設計程式的概念,將資料容器與演算法加以分開的一個設計程序,不僅僅可以簡化整個設計流程,更可以使程式模組設計好之後,可以獲得更廣泛的應用空間。這麼好的設計方式,其實已經行之有年,記得前幾天去某些科技公司面試的時候,他們不斷的詢問我問知不知道『侯捷』有沒有修過他的課程,後來才知道原來侯捷算是國內的MFC與STL的大師,只要有修過他開的課程,基本上的程式設計能力就有一定的能力。於是我修了STL與泛型程式設計。
在修的過程中,與我之前去接CASE的概念完全不同,雖然我已經相當的熟練物件導向的設計方式,與一些簡單的Template概念,但是卻沒有繼續的研讀一些軟體設計的方法論。所以聽到這些概念的時候,其實整個人是很感動的,在修了幾次的課程之後,於是開始回去架設可以執行STL的執行平台。
所以這篇文章主要是一個架設起可以執行STL的平台,裡面包括(1).STL架設在BCB5.0上的步驟(詳細請參照該篇文章),(2).利用UltraEdit建立一個可以Compiler的空間
架設STL的執行平台
雖然STL的設計概念非常的好,但是若你想要執行實做在你手邊有的IDE介面似乎是沒有的,所以我找了一些現有的一些資料裡面。關於STL的開發函示庫中,裡面以SGI的STL算是不錯,而侯捷老師開關於這些課程,也都是再追蹤SGI的STL裡面的源碼(source
code)。當你無法直接使用這些函示庫的時候,可以使用STLPORT這個網站所提供的套件去將STL移植到你常使用的IDE介面(比如說VC++,BCB,BC++….)但是有那麼簡單嗎?如果能像STLPORT裡面所提的Have
Fun!那也就好了~~我在GCC上面一直無法PORT成功。所以察看侯捷所寫的『STL源碼剖析』後面有位作者孟岩所寫的文章,是關於使用STLPORT在BCB與VC++上。
根據所以以下的操作先根據這樣的步驟,下載好BCB的compiler,並且可以去這裡下載STLPORT4.0的版本,依照該上面提到關於BCB5的部分,即可架設完整,裡面可能會遇到的是,MAKE的時候若是MAKE的時候,出現了Page
Table 的Size不夠大,即可修改 Makefile將第16行中的
LINK = tlib /P128 ===> LINK = tlib /P256 即可。
使用UltraEdit去建立編輯,執行平台
但是全部的編輯完成後,其實相當的麻煩,也就是每次編輯的時候需要透過DOS模式下COMMAND的方式去編輯軟體。UltraEdit是一個大家常用來撰寫原始碼、或是做些簡單的文書處理用的軟體。但是其實他可以搭配著Compiler去直接當成一個有簡單的IDE介面的CODE軟體。只要你WINDOW的目錄設定好(PATH裡面有包含到COMPILER的執行檔,可直接在COMMAND
LINE測試一次,即可知道)就可以利用UltraEdit去編譯程式。方法如下(以下說明針對英文版,中文請將相關位置找到即可):
首先先到 [Advanced]—>[Tool Configuration],即可看到一個編輯畫面如下:
先設定Compiler的部分:
根據這個畫面,將[Command Line]填入:” bcc32 %F”
指的就是可以利用bcc32 這個compiler去編譯這個檔案。而將[Working
Directory]設定到 “%P”
也就是編譯出來的中間檔放在該目錄之下。[Menu Item Name]裡面就是該TOOL的名稱,就隨便你填入你想要的名稱即可。並且記得將
[Show DOS Box]與 [Capture Output]兩個選項打勾,即可將這個操作的輸出結果抓取到另外一個檔案。
設定好之後,在主畫面中的[Advanced]下就會出現一個新的選項(快速鍵是
Shift+CTL+某個數字鍵),可拿著某個STL程式作一個簡單的測試。
接著設定執行程式的部分:
一樣到剛才那個畫面根據這個畫面,將[Command Line]填入:”%P%N.exe”
指的就是可以利用執行這個檔案編譯好的執行檔。而將[Working
Directory]也設定 “%P” 。[Menu Item Name]裡面就是該TOOL的名稱,一樣你填入你想要的名稱即可。記得也需要將並且記得將
[Show DOS Box]與 [Capture Output]兩個選項打勾,才能由畫面看到您的執行結果。
若要測試這樣的程式是否成功,可以利用UltraEdit開啟該CPP檔案,按下(CTL+Shift+0)『假設你設定COMPILER是第一個),就會出現一個編譯畫面,並且會出現一個新的編輯文字方塊,裡面出現相關的錯誤訊息或是正確訊息。要執行的話按下(CTL+Shift+1),就會看到其相關的執行結果在另外一個編輯文字的檔案之中。
繼續閱讀
April
21st,
2004
最近有個朋友生魚片跟我講說(該留言內容),裡面講到說我的類別彙整找到錯誤的類別,也就是說按下該類別卻會找出分類名稱不一樣的內容。後來回去分析原因,原來由於在MT的系統之中,所有類別的名稱都會被當成一個目錄名稱,所以當您使用非英文單字的時候,就會發生一些錯誤。所以切記!類別名稱不可以使用中文、日文與標點符號。或許大家這的地方都不太清楚,如果您在新增類別的地方,仍然使用中文的類別名稱,您可以檢查看看您的類別彙整是否會指向錯誤的地方?
若是您跟我一樣發生了這樣的錯誤您可以依照以下的方式來更改與類別有關的資訊來讓整個BLOG不會讓類別顯示全部英文。
1.首先得先到『類別』去『編輯類別屬性』,將『類別名稱』更改到『類別敘述』去
2.若您想在類別上面使用圖片,可以在『類別敘述』上加上圖片的網址即可。EX:<img
src=”pic_address.jpg>
3.請到主索引上關於分類彙整的部分更新為以下
類別彙整
()
4.如果您有使用我之前所提更改的分類樣版,可以依照以下的將『模版』–>『日期模版』與『分類模版』,加以修改。
: 彙整
function OpenComments (c) {
window.open(c,
‘comments’,
‘width=480,height=480,scrollbars=yes,status=yes’);
}
function OpenTrackback (c) {
window.open(c,
‘trackback’,
‘width=480,height=480,scrollbars=yes,status=yes’);
}
###
( )
由 於
所發表 | 單篇文章
| 迴響 ()
| |引用 ()
5.如果各位想學習我在首頁『總索引』中具有分類的名稱,可將以下的部分加在『主索引模版』中發表時間的前面即可。
就差不多是這樣,記得重建!!
繼續閱讀
April
18th,
2004
看了草莓園地對於External
Sunshine of Spotless Mind 的介紹,對於她所講的一段敘述覺得很有興趣:『如果可以選擇,對於那些令你心碎欲絕、痛不欲生、喝個小酒就留下眼淚、甚至想都不願再想起的回憶,妳會勇敢地與他共存、還是乾脆來個
一勞永逸,永遠將他銷除了事?』,於是忍不住的去看了這部電影
蠻欣賞這部電影導演的功力,將整個電影利用倒敘法的方式來敘述,但是整體不但讓看的人能完全瞭解,並且針對這樣的安排覺得相當的完美。可以說,除了這樣來敘述這個電影,還真找不到第二個方式去敘述它。
對於這部電影的內容,我就不再多加敘述,要看的人可以去草莓園地稍微瞭解一下對於這部片子的敘述,看完之後的感覺是:『真是一部不錯的片子!!!』因此在電影看完的時候,我久久不能言語,呆坐在星巴克思考著整部電影所帶來的疑問,『對於痛苦的回憶,你會怎麼面對呢?』
不過這部電影倒是也帶來幾個特別的想法,在此跟大家提出來思考一下,首先,男主角Joel(金凱瑞飾演)與女主角Clementine(凱特溫絲蕾飾演)因為與彼此相處的不開心,而將一切與對方有關的記憶加以消除,但是雙方在隔天起來之後,雖然忘記一切的事情,但是會覺得生命中少了什麼,並且對於相同的事情(Clementine後來遇到一個使用Joel的記憶來追求他的男生)也因為角色的不同而感受到厭惡,即使記憶消失之後,男女主角在Montauk(一個佈滿大雪的外地)相遇之後,既然有種相逢恨晚的感受(恩恩~~
沒錯!
很像前世記憶的感覺),也呼應著這片我一直覺得很爛的電影標題『王牌冤家』,真的只能說兩個人是一對冤家,不是嗎?
再者,『如果你知道與對方交往可能因為個性不合而分手,你還會選擇交往嗎?』,針對這一點,也是本片最後的結局,雖然雙方都知道對方因為交往痛苦而去消去對彼此的回憶,但是Joel最後還是選擇交往,看到這裡,其實眼眶給他滿滿的潤滑液(淚水啦),或許感情就是如此,因為愛情本身就是經過論,而非結果論,若知道一定會分手,因此不下決心去好好的享受這段感情,我想人生真的會白活這一次。
其實這一片在看的時候,有很多我認為感動的時候,首先在剛開始,Joel由於被拋棄而在街頭開車痛哭的樣子,讓我想起以前的事情,我想在失戀的時候那種無助的感覺,金凱瑞真的將他詮釋的很好。還有,在醫生一步步的將金凱瑞對於女主角回憶的事情慢慢的消去的時候,女主角問金凱瑞說:『你不在乎記憶慢慢的被消去嗎?』,金凱瑞則說:『沒關係,好好享受這最後的回憶吧!!』恩恩~~~
是洋蔥,這時候洋蔥忽然出來了,不論如何,任何一段回憶應該都是每個人最寶貝的東西,如果真的有向『記憶裂痕』『王牌冤家』這些片子一樣的記憶消去器,我絕對不會選擇消去任何回憶,不論是快樂的回憶,還是痛苦到不行的回憶,全部都是構成我的因子,沒有了這些回憶,我想~~~~
我再也不是我!!
『Enjoy It!!!!』
繼續閱讀
April
16th,
2004
恩恩,基本上我MT的針對於瀏覽者的最佳化方面的工作已經告一段落了,除了這次的這個。下一次貼與MT相關的東西,應該會考慮去MT-Extensions翻翻看有哪一些比較有用的最佳化,或是一些寫好的程式拿來使用,不過最近投稿研討會的計畫已經嚴重的影響到我五月多畢業的計畫,最近可能要進入前所未有的黑暗論文奮鬥期,果然重新審查論文,比寫一篇新的論文還簡單的說~~~~
廢話不說了,這次主要要講兩個地方,第一個就是各位看到的『顯示他人引用』的部分,第二不份就是上面有提到的『每月彙整』的部分:
1.在顯示他人引用的部分,上次我只是寫出『告知他人,本文章的引用位置』,那麼如果真的有人引用你的文章,你要在哪裡察看呢?請在『每日彙整』(Individual Entry Archive)上加入你想放置的地方(像我釋放在『迴響』之前,全文之後)
引用
**
>
> 引用此篇網址:
>
> **
以下是前來引用的連結
'' 來自
>
>
**文摘:**
**網誌:**
**引用時間:**
>
>
</blockquote>
在這裡有幾個重要的東西,之前的引用部分,並沒有加入判斷,這個判斷是指說若你的那篇文章並沒有允許引用通告(比如說留言版,沒有通告的文章)需要加一些基本的判斷就是在以下的部分(之前的文章已經修改完畢~~~)
與
2.在下拉的每月彙整選單方面(也就是上面那個圖形的程式部分),請在主索引上面加上以下的程式吧!!
function MM_jumpMenu(targ,selObj,restore){ //v3.0
eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
if (restore) selObj.selectedIndex=0;
}
每月彙整
前期文章
( )
這樣應該就可以了~
繼續閱讀