文本圖像壓縮中需要?jiǎng)?chuàng)建在圖像中出現(xiàn)的形狀庫(kù)。這些形狀通常和字符有關(guān),在圖像中出現(xiàn)的形狀就會(huì)被指向圖形庫(kù)的指針替換。一般來(lái)說(shuō),雖然存在許多變體,但處理步驟包括如下:
找出、分離并且抽取所有的標(biāo)記,即圖像中聚集在一起出現(xiàn)的黑色像素。
建立一個(gè)包含圖像中發(fā)現(xiàn)所有標(biāo)記的庫(kù)
通過(guò)識(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)圖像無(wú)損,需要包括下面處理步驟:存儲(chǔ)足夠的信息以完成從重構(gòu)文本中恢復(fù)原始圖像。
當(dāng)標(biāo)記被抽取出來(lái)以后,需要將其與已經(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ì)更有效。如果沒(méi)有發(fā)現(xiàn)足夠近似的匹配點(diǎn),則將新標(biāo)記添加到庫(kù)中。模板匹配對(duì)成功識(shí)別標(biāo)記至關(guān)重要,匹配過(guò)程一般通過(guò)檢查誤差圖來(lái)實(shí)現(xiàn),誤差圖通過(guò)將新符號(hào)和庫(kù)成員逐比特進(jìn)行異或得到。在計(jì)算誤差圖之前,匹配的雙方必須要正確注冊(cè)。新符號(hào)添加在庫(kù)中每個(gè)符號(hào)之前,為此需要在庫(kù)中設(shè)置一個(gè)固定的參考點(diǎn)。
庫(kù)模板篩法是一種模板匹配方法,主要基于標(biāo)記的特征,與輸入標(biāo)記明顯不同的符號(hào)不必匹配,例如在寬度和長(zhǎng)度上明顯不同的模板必定是不相似的。庫(kù)模板篩法主要基于面積和周長(zhǎng),當(dāng)抽取標(biāo)記后很容易得到這些數(shù)據(jù),然而在實(shí)踐的操作中并沒(méi)有看起來(lái)容易,一方面因?yàn)樗鼈兒蜆?biāo)記的寬度和高度有關(guān);另一方面因?yàn)樗鼈儗?duì)噪聲和數(shù)字化過(guò)程的參數(shù)特別敏感。其他看上去更確定的特征是垂直和水平的白行程數(shù)。庫(kù)模板篩法的一個(gè)更好基礎(chǔ)應(yīng)該是比較兩個(gè)標(biāo)記中黑像素團(tuán)的分布。通過(guò)將像素根據(jù)其質(zhì)心注冊(cè),然后將其劃分為圍繞質(zhì)心的4象限來(lái)實(shí)現(xiàn)。對(duì)于每個(gè)象限,計(jì)算其質(zhì)心:對(duì)4個(gè)局部質(zhì)心,分別計(jì)算其在兩個(gè)標(biāo)記中位置的距離,最后將4個(gè)距離平均。這一過(guò)程可能不斷地重復(fù),以確定一個(gè)基于原始質(zhì)心的0級(jí)上距離(改質(zhì)心距離為0,因?yàn)槭褂玫氖琴|(zhì)心注冊(cè))、一個(gè)如上所述的1級(jí)上的距離,以及更高級(jí)上的距離。測(cè)試表明,優(yōu)良的篩選結(jié)果往往是在1級(jí)距離上獲得的,更復(fù)雜的處理并無(wú)必要。
標(biāo)記(signature)是邊界的一維表達(dá),可以用多種方法來(lái)產(chǎn)生。其基本思想是將原始的二維邊界用元函數(shù)來(lái)表示,以降低表達(dá)難度。最簡(jiǎn)單的方法就是把從重心到邊界的距離作為角度的函數(shù)來(lái)標(biāo)記。
標(biāo)記與鏈碼同樣不受邊界平移的影響,但是當(dāng)邊界旋轉(zhuǎn)或者發(fā)生尺度變換時(shí),標(biāo)記格會(huì)發(fā)生改變。對(duì)于旋轉(zhuǎn)問(wèn)題,可以采用類似于鏈碼的旋轉(zhuǎn)歸一化方法進(jìn)行解決。更常用的方法是通過(guò)固定標(biāo)記的起始點(diǎn)來(lái)歸一化。例如,可以選擇離重心最遠(yuǎn)的邊界點(diǎn)作為起始點(diǎn),或者選擇主軸上的某一點(diǎn)。雖然后者的計(jì)算量比較大,但是它比前者更加可靠,因?yàn)樗玫搅怂械倪吔琰c(diǎn)來(lái)參與計(jì)算。而對(duì)尺度變化則可以通過(guò)幅度的歸一化來(lái)處理。
新建土建算量工程時(shí),計(jì)算規(guī)則必須選擇消耗量定額時(shí) 才能套模板的子目,選擇清單就不可了, 答:你好:可以的,你選擇清單的時(shí)候也要選擇定額的計(jì)算規(guī)則。
1、廣東地區(qū),建筑工程比如梁套模板做法我是選則清單中的模板工程還是措施項(xiàng)目中的模板、腳手架工程 2、如果我選擇清單中的模板工程,在措施項(xiàng)目中打鉤,工程量表達(dá)式都變?yōu)?,但單位還是平方米,而不是項(xiàng),需要...
框架柱之間的梁套單梁模板(框架梁),在板中間的次梁(連系梁)套有梁板模板 板上沒(méi)有次梁,只是框架梁之間的板套平板的模板, 板上有次梁的,板與次梁的工程量合并套有梁板的定額子目, 是因?yàn)槟銢](méi)有仔細(xì)找,我...
概述
文本圖像(textual image 或 text image)是一種特殊類型的黑白二值圖像,它的主要特點(diǎn)是其內(nèi)容一般由文字部分組成。從數(shù)據(jù)壓縮的角度來(lái)看,文本圖像存在位圖和符號(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ù)合文檔的壓縮,它通過(guò)一個(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)行壓縮。 模式匹配的過(guò)程中,所謂“相同”的符號(hào)是指其相對(duì)于人的視覺(jué)是相同的,而在位圖層次往往不完全相同。如何將視覺(jué)上相同的符號(hào)歸為一類是模式匹配算法面臨的一個(gè)很大挑戰(zhàn)。這是因?yàn)?,由于掃描過(guò)程中的抖動(dòng)、噪音 等原因,有些視覺(jué)上相同的符號(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)和流程,而并沒(méi)有定義一個(gè)明確的編碼器。JBIG2 將編碼程序開(kāi)放,是為了鼓勵(lì)研究者們針對(duì)不同特點(diǎn)的文本圖像開(kāi)發(fā)更加高效的編碼算法。
JBIG2 的主要技術(shù)最早由美國(guó)貝爾實(shí)驗(yàn)室的Howard 等開(kāi)發(fā),主要包括 “模式匹配與替換 ”(pattern matching and substitution,PM&S) 和“軟模式匹配”(soft pattern matching,SPM)技術(shù)。這些技術(shù)后來(lái)被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)作為特征,并利用這些特征來(lái)減少有損壓縮中的替換誤差。由于 Ye 等在 JBIG2 方面所做出的出色工作,其研究成果通過(guò)加州大學(xué)圣地亞哥分校的技術(shù)轉(zhuǎn)移部門(mé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í)性和有效性的圖像文件,如包含手寫(xiě)簽名、銀行票據(jù)的圖像文件。當(dāng)今社會(huì),不管是在商業(yè)經(jīng)濟(jì)方面還是政府部門(mén)等領(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)用軟件很罕見(jiàn)。日常生活中對(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í)代的到來(lái),人們對(duì)知識(shí)產(chǎn)權(quán)也越來(lái)越重視,并頒布了相關(guān)法律對(duì)其進(jìn)行保護(hù)。為了有效地管理和搜索查詢只是產(chǎn)權(quán)文件,可以使用文本圖像檢索技術(shù)。圖像文件保證了產(chǎn)權(quán)文件的不易篡改,自動(dòng)檢索技術(shù)提供了關(guān)鍵信息的快捷查詢。隨著文本圖像文件量的急劇增加,文本圖像的檢索技術(shù)的作用體現(xiàn)得越來(lái)越明顯。
合同管理。在當(dāng)今法制社會(huì)中,具有法律效力的合同文件是經(jīng)濟(jì)市場(chǎng)中不可或缺的文件。合同文件的關(guān)鍵信息之一是個(gè)人簽章或者手寫(xiě)簽名。在合同文件圖像的管理中,管理文件的員工不需要埋頭在紙質(zhì)文檔中尋找領(lǐng)導(dǎo)需要的合同文件,只需敲敲手指就能在計(jì)算機(jī)上查找出來(lái)。手寫(xiě)字體的自動(dòng)檢索技術(shù)應(yīng)用到合同圖像文件中個(gè)人簽名內(nèi)容的識(shí)別,將大大提高對(duì)合同管理的效率。
其它用途。文本圖像檢索技術(shù)同樣可以應(yīng)用到軍事中,對(duì)危險(xiǎn)病毒文件自動(dòng)監(jiān)控和攔截以及對(duì)遠(yuǎn)方地理信息的描述等等。
格式:pdf
大?。?span id="jd93oc7" class="single-tag-height">518KB
頁(yè)數(shù): 4頁(yè)
評(píng)分: 4.6
提出瓷磚圖像模板匹配的匹配程度公式,分析匹配度與公式值的關(guān)系.將匹配程度公式作為最優(yōu)保留個(gè)體遺傳算法的目標(biāo)函數(shù),設(shè)立遺傳算法的3個(gè)變量,即x軸起始位置、y軸起始位置和放大倍數(shù)對(duì)圖像的模板進(jìn)行匹配優(yōu)化.實(shí)驗(yàn)結(jié)果表明,遺傳算法的匹配結(jié)果基本穩(wěn)定,能滿足工業(yè)實(shí)時(shí)性的要求,模板的大小同匹配時(shí)間成反比,同效果成正比.
格式:pdf
大?。?span id="m94r2b2" class="single-tag-height">518KB
頁(yè)數(shù): 4頁(yè)
評(píng)分: 4.6
提出了重構(gòu)曲面的一種基于三角網(wǎng)格拼接與融合的再設(shè)計(jì)方法 ,可方便靈活地實(shí)現(xiàn)同類型產(chǎn)品優(yōu)良設(shè)計(jì)的結(jié)合。提出的網(wǎng)格模板的定位算法保證了網(wǎng)格模板與再設(shè)計(jì)模型空間位置的匹配 ;角度匹配算法保證了模板與再設(shè)計(jì)模型之間最大限度的貼合 ,為最終再設(shè)計(jì)網(wǎng)格的構(gòu)成和再設(shè)計(jì)曲面的光順性奠定了基礎(chǔ)。這些算法在多個(gè)再設(shè)計(jì)實(shí)例中得到應(yīng)用 ,取得了良好的效果
標(biāo)準(zhǔn)模板庫(kù)是一個(gè)C 軟件庫(kù),大量影響了C 標(biāo)準(zhǔn)程序庫(kù)但并非是其的一部分。其中包含4個(gè)組件,分別為算法、容器、函數(shù)、迭代器。
模板是C 程序設(shè)計(jì)語(yǔ)言中的一個(gè)重要特征,而標(biāo)準(zhǔn)模板庫(kù)正是基于此特征。標(biāo)準(zhǔn)模板庫(kù)使得C 編程語(yǔ)言在有了同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年開(kāi)始即在計(jì)算機(jī)幾何領(lǐng)域發(fā)展并倡導(dǎo)某些泛型程序設(shè)計(jì)觀念,但早期并沒(méi)有任何編程語(yǔ)言支持泛型程序設(shè)計(jì)。第一個(gè)支持泛型概念的語(yǔ)言是Ada。Alex和Musser曾于1987開(kāi)發(fā)出一套相關(guān)的Ada library.
標(biāo)準(zhǔn)模板庫(kù)設(shè)計(jì)人Stepanov早期從事教育工作,1970年代研究泛型程序設(shè)計(jì),那時(shí)他與其同事一起在GE公司開(kāi)發(fā)出一個(gè)新的程序語(yǔ)言——Tecton。
1983年,Stepanov先生轉(zhuǎn)至Polytechnic大學(xué)教書(shū),繼續(xù)研究泛型程序設(shè)計(jì),同時(shí)寫(xiě)了許多Scheme的程序,應(yīng)用在graph與network的算法上,1985年又轉(zhuǎn)至GE公司專門(mén)教授高階程序設(shè)計(jì),并將graph與network的Scheme程序,改用Ada寫(xiě),用了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)行開(kāi)發(fā)泛型程序庫(kù)的工作。此時(shí),他已經(jīng)認(rèn)識(shí)C語(yǔ)言中指針(pointer)的威力,他表示一個(gè)程序員只要有些許硬件知識(shí),就很容易接受C語(yǔ)言中指針的觀念,同時(shí)也了解到C語(yǔ)言的所有數(shù)據(jù)結(jié)構(gòu)均可以指針間接表示,這點(diǎn)是C與Ada、Scheme的最大不同。
Stepanov并認(rèn)為,雖然C 中的繼承功能可以表示泛型設(shè)計(jì),但終究有個(gè)限制。雖然可以在基礎(chǔ)類型(superclass)定義算法和接口,但不可能要求所有對(duì)象皆是繼承這些,而且龐大的繼承體系將減低虛擬(virtual)函數(shù)的運(yùn)行效率,這便違反的前面所說(shuō)的“效率”原則。
到了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)為可以通過(guò)C 的重載(overloading)功能來(lái)表達(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回想起來(lái)非常同意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)行的訪談中說(shuō)道‘1992 我重回generic-library的開(kāi)發(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一樣,也就是說(shuō)它們應(yīng)該是顯式實(shí)例,Bjarne沒(méi)有聽(tīng)進(jìn)我的話,他設(shè)計(jì)了一個(gè)template function機(jī)制,其中的template是以一個(gè)重載化機(jī)制 (overloading mechanism來(lái)進(jìn)行隱式實(shí)例這項(xiàng)特殊的技術(shù)對(duì)我的工作具有關(guān)鍵性的影響,因?yàn)槲野l(fā)現(xiàn)它使我得以完成Ada不可能完成的許多動(dòng)作。我非常高興Bjarne當(dāng)初沒(méi)有聽(tīng)我的意見(jiàn)。’(DDJ 1995 年三月號(hào))”
事實(shí)上,C 的模板,本身即是一套復(fù)雜的宏語(yǔ)言(macro language),宏語(yǔ)言最大的特色為:所有工作在編譯時(shí)期就已完成。顯式的聲明函數(shù)模板之實(shí)例,與直接通過(guò)C 的重載功能隱式聲明,結(jié)果一樣,并無(wú)很大區(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而來(lái)),Lee先前研究的是編譯器的制作,對(duì)C 的模板很熟,第一版的標(biāo)準(zhǔn)模板庫(kù)中許多程序都是Lee的杰作。
1993年,Andy Koenig到史丹佛演講,Stepanov便向他介紹標(biāo)準(zhǔn)模板庫(kù),Koenig聽(tīng)后,隨即邀請(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ù)的幫助文檔撰寫(xiě)齊全,在1月25日前提出,便可能成為標(biāo)準(zhǔn)C 的一部分。Stepanov回信道:"Andy, are you crazy" 。 Koenig便說(shuō):"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ù)分開(kāi)”,分別以如下概念指代:
容器:包含、放置數(shù)據(jù)的地方。
迭代器:在容器中指出一個(gè)位置、或成對(duì)使用以劃定一個(gè)區(qū)域,用來(lái)限定操作所涉及到的數(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ù)迭代器
迭代器是泛化的指針,通過(guò)使用迭代器,開(kāi)發(fā)者可以操作數(shù)據(jù)結(jié)構(gòu)而無(wú)需關(guān)心其內(nèi)部實(shí)現(xiàn)。根據(jù)迭代器的操作方式的不同,迭代器分為五種:
輸入迭代器
輸出迭代器
前向迭代器
雙向迭代器
隨機(jī)訪問(wèn)迭代器
標(biāo)準(zhǔn)模板庫(kù)算法
STL提供了一些常見(jiàn) 的算法,如排序和搜索等。這些算法與數(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í)例,而廣義來(lái)講所有可用 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è)常見(jiàn)的誤解是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 語(yǔ)言標(biāo)準(zhǔn),因此ATL自行開(kāi)發(fā)實(shí)現(xiàn)了一套。
ATL定義三個(gè)宏來(lái)來(lái)影響生成的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,但是沒(méi)有為Debug版本定義這個(gè)符號(hào)宏。
_ATL_DLL 服務(wù)器動(dòng)態(tài)鏈接工具函數(shù)庫(kù)atl.dll
_ATL_STATIC_REGISTRY 服務(wù)器靜態(tài)鏈接對(duì)組件注冊(cè)的支持
Debug配置沒(méi)有定義上述三個(gè)符號(hào)宏。Release MinSize配置定義了_ATL_MIN_CRT和_ATL_DLL。Release MinDependency配置定義了_ATL_MIN_CRT和_ATL_STATIC_REGISTRY。