概述
文本圖像(textual image 或 text image)是一種特殊類型的黑白二值圖像,它的主要特點(diǎn)是其內(nèi)容一般由文字部分組成。從數(shù)據(jù)壓縮的角度來看,文本圖像存在位圖和符號(hào)兩個(gè)層次的冗余,后者是由圖像中重復(fù)的符號(hào)引起的。針對(duì)文本圖像的壓縮標(biāo)準(zhǔn)和算法主要G3,G4JBIG和JBIG2等,其中 G3,G4和 JBIG 都是基于位圖層次的壓縮方法,而JBIG2是基于位圖和符號(hào)層次冗余的兩層壓縮方法。另外,基于混合光柵內(nèi)容( mixed raster content,MRC) 的DjVu 主要用于復(fù)合文檔的壓縮,它通過一個(gè)黑白二值掩碼(mask)將圖像分成前景和背景,然后對(duì)不同的部分再采用適合的算法分別進(jìn)行壓縮,其中對(duì)于掩碼的壓縮采用的是JB2算法。JB2 是 JBIG2 的一種變體,它和 JBIG2 的基本思想和實(shí)現(xiàn)方法都是類似的。JBIG2是最先進(jìn)的文本圖像壓縮算法,如上所述它實(shí)現(xiàn)了一個(gè)兩層壓縮結(jié)構(gòu):首先根據(jù)“字典”的思想,采用模式匹配策略將不同的符號(hào)存儲(chǔ)到一個(gè)模式字典中,這樣圖像中相同的符號(hào)就可以用字典中的匹配符號(hào)及其索引進(jìn)行替代;然后對(duì)于得到的字典、索引以及符號(hào)的位置信息再采用基于信息熵的算術(shù)編碼進(jìn)行壓縮。 模式匹配的過程中,所謂“相同”的符號(hào)是指其相對(duì)于人的視覺是相同的,而在位圖層次往往不完全相同。如何將視覺上相同的符號(hào)歸為一類是模式匹配算法面臨的一個(gè)很大挑戰(zhàn)。這是因?yàn)椋捎趻呙柽^程中的抖動(dòng)、噪音 等原因,有些視覺上相同的符號(hào)在位圖層次可能有比較大的差異,而某些外形接近的不同符號(hào)在位圖層次的差異可能是比較小的。和英文文本圖像相比,中文文本圖像中的字符集規(guī)模更大,很多漢字結(jié)構(gòu)比較復(fù)雜,且形近字非常多。中文文本圖像的這些特點(diǎn)增加了對(duì)符號(hào)進(jìn)行模式匹配的難度 。
JBIG2 是由 ITU和ISO組成的二值圖像聯(lián)合專家組(joint bi-level image expert group,JBIG)提出的一個(gè)壓縮標(biāo)準(zhǔn)。JBIG2 的一個(gè)重要特點(diǎn)是:只規(guī)定了解碼的標(biāo)準(zhǔn)和流程,而并沒有定義一個(gè)明確的編碼器。JBIG2 將編碼程序開放,是為了鼓勵(lì)研究者們針對(duì)不同特點(diǎn)的文本圖像開發(fā)更加高效的編碼算法。
JBIG2 的主要技術(shù)最早由美國(guó)貝爾實(shí)驗(yàn)室的Howard 等開發(fā),主要包括 “模式匹配與替換 ”(pattern matching and substitution,PM&S) 和“軟模式匹配”(soft pattern matching,SPM)技術(shù)。這些技術(shù)后來被ISO 采納成為了 JBIG2 標(biāo)準(zhǔn)的一部分。美國(guó)加州大學(xué)圣地亞哥分校的 Ye 等對(duì)JBIG2 進(jìn)行了系統(tǒng)的研究 ,主要從符號(hào)字典設(shè)計(jì) 、模式匹配速度和有損壓縮的重構(gòu)圖像質(zhì)量控制等方面提出了很多先進(jìn)的算法。對(duì)于有損壓縮系統(tǒng),Ye 等針對(duì)英文字符的特點(diǎn)提取了符號(hào)的尺寸、象限矩心距離(quadrant centroid distance,QCD)以及拓?fù)浣Y(jié)構(gòu)作為特征,并利用這些特征來減少有損壓縮中的替換誤差。由于 Ye 等在 JBIG2 方面所做出的出色工作,其研究成果通過加州大學(xué)圣地亞哥分校的技術(shù)轉(zhuǎn)移部門轉(zhuǎn)讓給了Apago 公司并應(yīng)用到其商業(yè)化的產(chǎn)品中,成功實(shí)現(xiàn)了技術(shù)成果的轉(zhuǎn)化。
意義
對(duì)于一些非常重要的正式文件,它的主要存儲(chǔ)方式為文本圖像。與文本文件相比較,圖像文件能夠?qū)?chǎng)景更加直觀、真實(shí)的進(jìn)行表述,對(duì)其不易進(jìn)行篡改或者偽造。比如一些更能體現(xiàn)其真實(shí)性和有效性的圖像文件,如包含手寫簽名、銀行票據(jù)的圖像文件。當(dāng)今社會(huì),不管是在商業(yè)經(jīng)濟(jì)方面還是政府部門等領(lǐng)域,對(duì)于很多重要的信息都是以電子圖片的方式進(jìn)行交流的。然而,不管是什么事物,它都具有兩面性,在圖像文件的管理方面,有著不容忽視的劣勢(shì)。如果用圖像的形式存儲(chǔ)文字信息,信息量將變得很大,所需的存儲(chǔ)空間也比電子文本文件大,不利于文字信息的快速識(shí)別。隨著計(jì)算機(jī)技術(shù)的進(jìn)步,這些不足將會(huì)逐漸被克服。
文本圖像檢索的實(shí)際應(yīng)用涉及面廣,可以運(yùn)用到辦公的文件管理、日常生活的文件查詢、國(guó)企銀行單位票據(jù)文件查詢和檢索等多個(gè)方面。
文本圖像文件的高效、智能分類。在工作中,為了提高管理效率、使得信息的查詢更加方便,就需要對(duì)大量的文本圖像信息做一定的整理和分類。比如公司合同文件,它是依據(jù)公司標(biāo)志信息的不同,利用文本圖像檢索技術(shù)將大量的錯(cuò)綜復(fù)雜的圖像文件進(jìn)行分類和歸檔,高效智能的完成圖像文件的管理,提高了業(yè)務(wù)辦公的智能性和效率。
文本圖像自動(dòng)查詢。雖然已經(jīng)有 PDF、WORD 等電子文檔查詢的應(yīng)用軟件,但是用于檢索文本圖像內(nèi)容的應(yīng)用軟件很罕見。日常生活中對(duì)文本圖像文件檢索的需求卻在增加。如果對(duì)大量文本圖像進(jìn)行管理,不僅需要大量的人力、物力,而且工作量也非常大。尤其是需要查找圖片文件中的關(guān)鍵字等特定信息,就要人工進(jìn)行查看每張圖的內(nèi)容,并且還要相當(dāng)仔細(xì),導(dǎo)致工作量的增加,效率也不高,不但成本耗費(fèi)大,也不能滿足當(dāng)前實(shí)際應(yīng)用的需求。本文所研究的文本圖像自動(dòng)檢索技術(shù)實(shí)現(xiàn)文本圖像文件的快速查詢和智能管理,能夠幫助文件管理
人員快速、高效地處理圖像文本文件,具有較大的實(shí)際應(yīng)用意義。
知識(shí)產(chǎn)權(quán)保護(hù)。隨著 IP 時(shí)代的到來,人們對(duì)知識(shí)產(chǎn)權(quán)也越來越重視,并頒布了相關(guān)法律對(duì)其進(jìn)行保護(hù)。為了有效地管理和搜索查詢只是產(chǎn)權(quán)文件,可以使用文本圖像檢索技術(shù)。圖像文件保證了產(chǎn)權(quán)文件的不易篡改,自動(dòng)檢索技術(shù)提供了關(guān)鍵信息的快捷查詢。隨著文本圖像文件量的急劇增加,文本圖像的檢索技術(shù)的作用體現(xiàn)得越來越明顯。
合同管理。在當(dāng)今法制社會(huì)中,具有法律效力的合同文件是經(jīng)濟(jì)市場(chǎng)中不可或缺的文件。合同文件的關(guān)鍵信息之一是個(gè)人簽章或者手寫簽名。在合同文件圖像的管理中,管理文件的員工不需要埋頭在紙質(zhì)文檔中尋找領(lǐng)導(dǎo)需要的合同文件,只需敲敲手指就能在計(jì)算機(jī)上查找出來。手寫字體的自動(dòng)檢索技術(shù)應(yīng)用到合同圖像文件中個(gè)人簽名內(nèi)容的識(shí)別,將大大提高對(duì)合同管理的效率。
其它用途。文本圖像檢索技術(shù)同樣可以應(yīng)用到軍事中,對(duì)危險(xiǎn)病毒文件自動(dòng)監(jiān)控和攔截以及對(duì)遠(yuǎn)方地理信息的描述等等。
標(biāo)記(signature)是邊界的一維表達(dá),可以用多種方法來產(chǎn)生。其基本思想是將原始的二維邊界用元函數(shù)來表示,以降低表達(dá)難度。最簡(jiǎn)單的方法就是把從重心到邊界的距離作為角度的函數(shù)來標(biāo)記。
標(biāo)記與鏈碼同樣不受邊界平移的影響,但是當(dāng)邊界旋轉(zhuǎn)或者發(fā)生尺度變換時(shí),標(biāo)記格會(huì)發(fā)生改變。對(duì)于旋轉(zhuǎn)問題,可以采用類似于鏈碼的旋轉(zhuǎn)歸一化方法進(jìn)行解決。更常用的方法是通過固定標(biāo)記的起始點(diǎn)來歸一化。例如,可以選擇離重心最遠(yuǎn)的邊界點(diǎn)作為起始點(diǎn),或者選擇主軸上的某一點(diǎn)。雖然后者的計(jì)算量比較大,但是它比前者更加可靠,因?yàn)樗玫搅怂械倪吔琰c(diǎn)來參與計(jì)算。而對(duì)尺度變化則可以通過幅度的歸一化來處理。
文本圖像壓縮中需要?jiǎng)?chuàng)建在圖像中出現(xiàn)的形狀庫(kù)。這些形狀通常和字符有關(guān),在圖像中出現(xiàn)的形狀就會(huì)被指向圖形庫(kù)的指針替換。一般來說,雖然存在許多變體,但處理步驟包括如下:
找出、分離并且抽取所有的標(biāo)記,即圖像中聚集在一起出現(xiàn)的黑色像素。
建立一個(gè)包含圖像中發(fā)現(xiàn)所有標(biāo)記的庫(kù)
通過識(shí)別圖像中的符號(hào)找到庫(kù)中與之最接近的標(biāo)記實(shí)現(xiàn),并度量一個(gè)標(biāo)記和下一個(gè)標(biāo)記的偏移值。
壓縮符號(hào)順序和偏移并存儲(chǔ)入庫(kù)。由于這一步驟中所存儲(chǔ)的信息可以產(chǎn)生稱為重構(gòu)文本的原始圖像的近似,所以為了重構(gòu)圖像無損,需要包括下面處理步驟:存儲(chǔ)足夠的信息以完成從重構(gòu)文本中恢復(fù)原始圖像。
當(dāng)標(biāo)記被抽取出來以后,需要將其與已經(jīng)在庫(kù)中的標(biāo)記匹配,所有匹配庫(kù)成員的標(biāo)記都會(huì)被保存在一個(gè)集合中。如果當(dāng)前標(biāo)記與庫(kù)中現(xiàn)有的一個(gè)標(biāo)記足夠匹配的話,則將其添加到與改符號(hào)相應(yīng)的匹配標(biāo)記集中,盡管將一個(gè)標(biāo)記與每一個(gè)庫(kù)中模板進(jìn)行匹配查找出與其最接近模板的可靠,但在一個(gè)模板被發(fā)現(xiàn)于一個(gè)特定的相似閾值之內(nèi)時(shí)即立即終止運(yùn)算會(huì)更有效。如果沒有發(fā)現(xiàn)足夠近似的匹配點(diǎn),則將新標(biāo)記添加到庫(kù)中。模板匹配對(duì)成功識(shí)別標(biāo)記至關(guān)重要,匹配過程一般通過檢查誤差圖來實(shí)現(xiàn),誤差圖通過將新符號(hào)和庫(kù)成員逐比特進(jìn)行異或得到。在計(jì)算誤差圖之前,匹配的雙方必須要正確注冊(cè)。新符號(hào)添加在庫(kù)中每個(gè)符號(hào)之前,為此需要在庫(kù)中設(shè)置一個(gè)固定的參考點(diǎn)。
目前圖形軟件還沒有這種功能只能一個(gè)個(gè)點(diǎn)套
套上做法,在工程量匯總表的總量,也可以在界面上“查看計(jì)算、查看工程量”逐一構(gòu)件的查看。 “在哪套做法???”在構(gòu)件名稱下,雙擊構(gòu)件。
定義構(gòu)件時(shí),不套模板定額子目,就不計(jì)算了。 如果報(bào)表里還有,可以不選用就是了。你們那里的定額規(guī)則是不是規(guī)定每超高1米?基本高度3.6米。 把工程量表達(dá)式,修改一下。在套定額時(shí),點(diǎn)擊工程量表達(dá)式的右邊空...
庫(kù)模板篩法是一種模板匹配方法,主要基于標(biāo)記的特征,與輸入標(biāo)記明顯不同的符號(hào)不必匹配,例如在寬度和長(zhǎng)度上明顯不同的模板必定是不相似的。庫(kù)模板篩法主要基于面積和周長(zhǎng),當(dāng)抽取標(biāo)記后很容易得到這些數(shù)據(jù),然而在實(shí)踐的操作中并沒有看起來容易,一方面因?yàn)樗鼈兒蜆?biāo)記的寬度和高度有關(guān);另一方面因?yàn)樗鼈儗?duì)噪聲和數(shù)字化過程的參數(shù)特別敏感。其他看上去更確定的特征是垂直和水平的白行程數(shù)。庫(kù)模板篩法的一個(gè)更好基礎(chǔ)應(yīng)該是比較兩個(gè)標(biāo)記中黑像素團(tuán)的分布。通過將像素根據(jù)其質(zhì)心注冊(cè),然后將其劃分為圍繞質(zhì)心的4象限來實(shí)現(xiàn)。對(duì)于每個(gè)象限,計(jì)算其質(zhì)心:對(duì)4個(gè)局部質(zhì)心,分別計(jì)算其在兩個(gè)標(biāo)記中位置的距離,最后將4個(gè)距離平均。這一過程可能不斷地重復(fù),以確定一個(gè)基于原始質(zhì)心的0級(jí)上距離(改質(zhì)心距離為0,因?yàn)槭褂玫氖琴|(zhì)心注冊(cè))、一個(gè)如上所述的1級(jí)上的距離,以及更高級(jí)上的距離。測(cè)試表明,優(yōu)良的篩選結(jié)果往往是在1級(jí)距離上獲得的,更復(fù)雜的處理并無必要。
格式:pdf
大?。?span id="frxtxn4" class="single-tag-height">102KB
頁(yè)數(shù): 9頁(yè)
評(píng)分: 4.8
附件 2: 國(guó)家級(jí)工法文本范例 導(dǎo)洞施工防護(hù)隔離樁墻施工工法 中鐵隧道集團(tuán)有限公司 馬鎖柱 王先堂 1.前言 在城市修建地鐵,不可避免地要在地面建 (構(gòu) )筑物附近穿過,為了爭(zhēng)取最好的線路運(yùn)營(yíng) 方案,也需選擇從地面建筑物附近穿過, 這不僅需要保證隧道工程本體施工的安全, 還須妥 善地解決隧道工程對(duì)附近既有建筑物的影響問題。 北京城鐵 13 號(hào)線 14 標(biāo)區(qū)間為下穿高層樓房的淺埋隧道, 需防止隧道暗挖施工引起地層 移動(dòng)和地表下沉, 防止地表及周邊既有建筑物發(fā)生過量變形與破壞是一具有相當(dāng)重大的技術(shù) 難題。 中鐵隧道集團(tuán)聯(lián)合設(shè)計(jì)單位和大專院校開展了科技創(chuàng)新,取得了 “導(dǎo)洞 ——隔離樁墻防 護(hù)技術(shù) ”這一國(guó)內(nèi)領(lǐng)先、 國(guó)際首創(chuàng)的新成果, 于 2002年通過北京市建設(shè)委員會(huì)鑒定, 獲得了 2003 年北京市科學(xué)技術(shù)二等獎(jiǎng)。同時(shí),形成了導(dǎo)洞施工防護(hù)隔離樁墻新穎的施工工法。由 于在處理地層與結(jié)構(gòu)、隧道施工
格式:pdf
大?。?span id="l82sosk" class="single-tag-height">102KB
頁(yè)數(shù): 9頁(yè)
評(píng)分: 4.4
導(dǎo)洞施工防護(hù)隔離樁墻施工工法 (YJGF06-2004 ) 中鐵隧道集團(tuán)有限公司 馬鎖柱 王先堂 1.前言 在城市修建地鐵,不可避免地要在地面建 (構(gòu) )筑物附近穿過,為了爭(zhēng)取最好的線路運(yùn)營(yíng)方案, 也需選擇從地面建筑物附近穿過,這不僅需要保證隧道工程本體施工的安全,還須妥善地解決隧 道工程對(duì)附近既有建筑物的影響問題。 北京城鐵 13 號(hào)線 14 標(biāo)區(qū)間為下穿高層樓房的淺埋隧道,需防止隧道暗挖施工引起地層移動(dòng) 和地表下沉,防止地表及周邊既有建筑物發(fā)生過量變形與破壞是一具有相當(dāng)重大的技術(shù)難題。 中鐵隧道集團(tuán)聯(lián)合設(shè)計(jì)單位和大專院校開展了科技創(chuàng)新,取得了“導(dǎo)洞——隔離樁墻防護(hù)技 術(shù)”這一國(guó)內(nèi)領(lǐng)先、國(guó)際首創(chuàng)的新成果,于 2002 年通過北京市建設(shè)委員會(huì)鑒定,獲得了 2003 年 北京市科學(xué)技術(shù)二等獎(jiǎng)。同時(shí),形成了導(dǎo)洞施工防護(hù)隔離樁墻新穎的施工工法。由于在處理地層 與結(jié)構(gòu)、隧道施工與既有建筑物相互作用
標(biāo)準(zhǔn)模板庫(kù)是一個(gè)C 軟件庫(kù),大量影響了C 標(biāo)準(zhǔn)程序庫(kù)但并非是其的一部分。其中包含4個(gè)組件,分別為算法、容器、函數(shù)、迭代器。
模板是C 程序設(shè)計(jì)語言中的一個(gè)重要特征,而標(biāo)準(zhǔn)模板庫(kù)正是基于此特征。標(biāo)準(zhǔn)模板庫(kù)使得C 編程語言在有了同Java一樣強(qiáng)大的類庫(kù)的同時(shí),保有了更大的可擴(kuò)展性。
在C 標(biāo)準(zhǔn)中,STL被組織為下面的13個(gè)頭文件:、
、
標(biāo)準(zhǔn)模板庫(kù)系由Alexander Stepanov創(chuàng)造于1979年前后,這也正是比雅尼·斯特勞斯特魯普創(chuàng)造C 的年代。
雖然David R. Musser于1971年開始即在計(jì)算機(jī)幾何領(lǐng)域發(fā)展并倡導(dǎo)某些泛型程序設(shè)計(jì)觀念,但早期并沒有任何編程語言支持泛型程序設(shè)計(jì)。第一個(gè)支持泛型概念的語言是Ada。Alex和Musser曾于1987開發(fā)出一套相關(guān)的Ada library.
標(biāo)準(zhǔn)模板庫(kù)設(shè)計(jì)人Stepanov早期從事教育工作,1970年代研究泛型程序設(shè)計(jì),那時(shí)他與其同事一起在GE公司開發(fā)出一個(gè)新的程序語言——Tecton。
1983年,Stepanov先生轉(zhuǎn)至Polytechnic大學(xué)教書,繼續(xù)研究泛型程序設(shè)計(jì),同時(shí)寫了許多Scheme的程序,應(yīng)用在graph與network的算法上,1985年又轉(zhuǎn)至GE公司專門教授高階程序設(shè)計(jì),并將graph與network的Scheme程序,改用Ada寫,用了Ada以后,他發(fā)現(xiàn)到一個(gè)動(dòng)態(tài)(dynamically)類型的程序(如Scheme)與強(qiáng)制(strongly)類型的程序(如Ada)有多么的不同。
在動(dòng)態(tài)類型的程序中,所有類型都可以自由的轉(zhuǎn)換成別的類型,而強(qiáng)制類型的程序卻不能。但是,強(qiáng)制類型在出錯(cuò)時(shí)較容易發(fā)現(xiàn)程序錯(cuò)誤。
1988年Stepanov先生轉(zhuǎn)至HP公司運(yùn)行開發(fā)泛型程序庫(kù)的工作。此時(shí),他已經(jīng)認(rèn)識(shí)C語言中指針(pointer)的威力,他表示一個(gè)程序員只要有些許硬件知識(shí),就很容易接受C語言中指針的觀念,同時(shí)也了解到C語言的所有數(shù)據(jù)結(jié)構(gòu)均可以指針間接表示,這點(diǎn)是C與Ada、Scheme的最大不同。
Stepanov并認(rèn)為,雖然C 中的繼承功能可以表示泛型設(shè)計(jì),但終究有個(gè)限制。雖然可以在基礎(chǔ)類型(superclass)定義算法和接口,但不可能要求所有對(duì)象皆是繼承這些,而且龐大的繼承體系將減低虛擬(virtual)函數(shù)的運(yùn)行效率,這便違反的前面所說的“效率”原則。
到了C 模板觀念,Stepanov參加了許多有關(guān)的研討會(huì),與C 之父Bjarne討論模板的設(shè)計(jì)細(xì)節(jié)。如,Stepanov認(rèn)為C 的函數(shù)模板(function template)應(yīng)該像Ada一樣,在聲明其函數(shù)原型后,應(yīng)該顯式的聲明一個(gè)函數(shù)模板之實(shí)例(instance);Bjarne則不然,他認(rèn)為可以通過C 的重載(overloading)功能來表達(dá)。
Stepanov想像中的函數(shù)模板:
in*.hpp templateTsquare(Tx){returnx*x;} in*.cpp doublesquare(double); cout< Bjarne認(rèn)為的函數(shù)模板:
in*.hpp templateTsquare(Tx){returnx*x;} in*.cpp cout< 幾經(jīng)爭(zhēng)辯,Stepanov發(fā)現(xiàn)Bjarne是對(duì)的(引用侯俊杰《標(biāo)準(zhǔn)模板庫(kù)講座·第三章》)。事后Stepanov回想起來非常同意Bjarne的作法。
template 引數(shù)推導(dǎo)機(jī)制(arguments deduction ,在標(biāo)準(zhǔn)模板庫(kù)中占非常重要的角色。Alexander Stepanov(標(biāo)準(zhǔn)模板庫(kù)創(chuàng)造者)在與Dr. Dobb's Journal進(jìn)行的訪談中說道‘1992 我重回generic-library的開發(fā)工作。這時(shí)候C 有了template
“我發(fā)現(xiàn)Bjarne完成了一個(gè)非常美妙的設(shè)計(jì)。之前我在Bell Lab曾參與數(shù)次template的相關(guān)設(shè)計(jì)討論,并且非常粗暴地要求Bjarne應(yīng)該將C template設(shè)計(jì)得盡可能像Ada generics那樣。我想由于我的爭(zhēng)辯是如此地粗暴,他決定反對(duì)。我了解到在C 中除了擁有template classes之外還擁有template functions的重要性。然而我認(rèn)為template function應(yīng)該像Ada generics一樣,也就是說它們應(yīng)該是顯式實(shí)例,Bjarne沒有聽進(jìn)我的話,他設(shè)計(jì)了一個(gè)template function機(jī)制,其中的template是以一個(gè)重載化機(jī)制 (overloading mechanism來進(jìn)行隱式實(shí)例這項(xiàng)特殊的技術(shù)對(duì)我的工作具有關(guān)鍵性的影響,因?yàn)槲野l(fā)現(xiàn)它使我得以完成Ada不可能完成的許多動(dòng)作。我非常高興Bjarne當(dāng)初沒有聽我的意見?!―DJ 1995 年三月號(hào))”
事實(shí)上,C 的模板,本身即是一套復(fù)雜的宏語言(macro language),宏語言最大的特色為:所有工作在編譯時(shí)期就已完成。顯式的聲明函數(shù)模板之實(shí)例,與直接通過C 的重載功能隱式聲明,結(jié)果一樣,并無很大區(qū)別,只是前者加重程序員的負(fù)擔(dān),使得程序變得累贅。
1992年Meng Lee加入Alex的項(xiàng)目,成為另一位主要貢獻(xiàn)者。
1992年,HP泛型程序庫(kù)項(xiàng)目結(jié)束,小組解散,只剩下Stepanov先生與Meng Lee小姐(她是東方人,標(biāo)準(zhǔn)模板庫(kù)的英文名稱其實(shí)是取STepanov與Lee而來),Lee先前研究的是編譯器的制作,對(duì)C 的模板很熟,第一版的標(biāo)準(zhǔn)模板庫(kù)中許多程序都是Lee的杰作。
1993年,Andy Koenig到史丹佛演講,Stepanov便向他介紹標(biāo)準(zhǔn)模板庫(kù),Koenig聽后,隨即邀請(qǐng)Stepanov參加1993年11月的ANSI/ISO C 標(biāo)準(zhǔn)化會(huì)議,并發(fā)表演講。
Bell實(shí)驗(yàn)室的Andrew Koenig于1993年知道標(biāo)準(zhǔn)模板庫(kù)研究計(jì)劃后,邀請(qǐng)Alex于是年11月的ANSI/ISO C 標(biāo)準(zhǔn)委員會(huì)會(huì)議上展示其觀念。并獲得與會(huì)者熱烈的回應(yīng)。
1994年1月6日,Koenig寄封電子郵件給Stepanov,表示如果Stepanov愿意將標(biāo)準(zhǔn)模板庫(kù)的幫助文檔撰寫齊全,在1月25日前提出,便可能成為標(biāo)準(zhǔn)C 的一部分。Stepanov回信道:"Andy, are you crazy" 。 Koenig便說:"Well, yes I am crazy,but why not try it"。
Alex于是在次年夏天在Waterloo舉行的會(huì)議前完成其正式的提案,并以百分之八十壓倒性多數(shù),一舉讓這個(gè)巨大的計(jì)劃成為C Standard的一部分。
標(biāo)準(zhǔn)模板庫(kù)于1994年2月年正式成為ANSI/ISO C 的一部分,它的出現(xiàn),促使C 程序員的思維方式更朝向泛型編程(generic program)發(fā)展。
標(biāo)準(zhǔn)模板庫(kù)內(nèi)容
STL 將“在數(shù)據(jù)上執(zhí)行的操作”與“要執(zhí)行操作的數(shù)據(jù)分開”,分別以如下概念指代:
容器:包含、放置數(shù)據(jù)的地方。
迭代器:在容器中指出一個(gè)位置、或成對(duì)使用以劃定一個(gè)區(qū)域,用來限定操作所涉及到的數(shù)據(jù)范圍。
算法:要執(zhí)行的操作。
標(biāo)準(zhǔn)模板庫(kù)包含了序列容器(sequence containers)與關(guān)系容器(associative containers)。
序列容器包括vector,list,forward_list,deque和array等。
關(guān)聯(lián)容器包括set,multiset,map,multimap,unordered_set,bitset和valarray等。
標(biāo)準(zhǔn)模板庫(kù)迭代器
迭代器是泛化的指針,通過使用迭代器,開發(fā)者可以操作數(shù)據(jù)結(jié)構(gòu)而無需關(guān)心其內(nèi)部實(shí)現(xiàn)。根據(jù)迭代器的操作方式的不同,迭代器分為五種:
輸入迭代器
輸出迭代器
前向迭代器
雙向迭代器
隨機(jī)訪問迭代器
標(biāo)準(zhǔn)模板庫(kù)算法
STL提供了一些常見 的算法,如排序和搜索等。這些算法與數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)進(jìn)行了分離。因此,用于也可對(duì)自定義的數(shù)據(jù)結(jié)構(gòu)使用這些算法,只需讓這些自定義的數(shù)據(jù)結(jié)構(gòu)擁有算法所預(yù)期的迭代器。
標(biāo)準(zhǔn)模板庫(kù)函數(shù)對(duì)象
狹義的函數(shù)對(duì)象即重載了操作符()的類的實(shí)例,而廣義來講所有可用 x(...) 形式調(diào)用的 x 都可稱為函數(shù)對(duì)象、或曰可調(diào)用對(duì)象。
標(biāo)準(zhǔn)模板庫(kù)適配器
適配器(Adaptor)為一個(gè)模板類,用于提供接口映射。
標(biāo)準(zhǔn)模板庫(kù)與C 標(biāo)準(zhǔn)程序庫(kù)的差異
一個(gè)常見的誤解是STL是C 標(biāo)準(zhǔn)程序庫(kù)的一部分,但事實(shí)上并非如此。例如hash table的數(shù)據(jù)結(jié)構(gòu)實(shí)當(dāng)前STL中有
模板可供調(diào)用,但C 標(biāo)準(zhǔn)程序庫(kù)一直到C 11才加入了 。 2100433B
afximpl.h 實(shí)現(xiàn)了一套模板庫(kù),如CArray, CList, CMap等。因?yàn)樵诎l(fā)布時(shí)STL尚未進(jìn)入C 語言標(biāo)準(zhǔn),因此ATL自行開發(fā)實(shí)現(xiàn)了一套。
ATL定義三個(gè)宏來來影響生成的COM服務(wù)器的優(yōu)化。
_ATL_MIN_CRT 服務(wù)器不鏈接標(biāo)準(zhǔn)的C/C 運(yùn)行庫(kù),并且ATL提供了函數(shù)malloc、realloc、new和delete的一個(gè)實(shí)現(xiàn)。不能調(diào)用任何其他的C/C 運(yùn)行庫(kù)的函數(shù)。_mainATL向?qū)傻腁TL工程為所有的Release版本的定義了_ATL_MIN_CRT,但是沒有為Debug版本定義這個(gè)符號(hào)宏。
_ATL_DLL 服務(wù)器動(dòng)態(tài)鏈接工具函數(shù)庫(kù)atl.dll
_ATL_STATIC_REGISTRY 服務(wù)器靜態(tài)鏈接對(duì)組件注冊(cè)的支持
Debug配置沒有定義上述三個(gè)符號(hào)宏。Release MinSize配置定義了_ATL_MIN_CRT和_ATL_DLL。Release MinDependency配置定義了_ATL_MIN_CRT和_ATL_STATIC_REGISTRY。