導航:首頁 > 源碼編譯 > stl庫演算法

stl庫演算法

發布時間:2022-05-23 17:57:19

❶ STL的演算法

大家都能取得的一個共識是函數庫對數據類型的選擇對其可重用性起著至關重要的作用。舉例來說,一個求方根的函數,在使用浮點數作為其參數類型的情況下的可重用性肯定比使用整型作為它的參數類型要高。而C++通過模板的機制允許推遲對某些類型的選擇,直到真正想使用模板或者說對模板進行特化的時候,STL就利用了這一點提供了相當多的有用演算法。它是在一個有效的框架中完成這些演算法的——你可以將所有的類型劃分為少數的幾類,然後就可以在模版的參數中使用一種類型替換掉同一種類中的其他類型。
STL提供了大約100個實現演算法的模版函數,比如演算法for_each將為指定序列中的每一個元素調用指定的函數,stable_sort以你所指定的規則對序列進行穩定性排序等等。這樣一來,只要我們熟悉了STL之後,許多代碼可以被大大的化簡,只需要通過調用一兩個演算法模板,就可以完成所需要的功能並大大地提升效率。
演算法部分主要由頭文件<algorithm>,<numeric>和<functional>組成。<algorithm>是所有STL頭文件中最大的一個(盡管它很好理解),它是由一大堆模版函數組成的,可以認為每個函數在很大程度上都是獨立的,其中常用到的功能范圍涉及到比較、交換、查找、遍歷操作、復制、修改、移除、反轉、排序、合並等等。<numeric>體積很小,只包括幾個在序列上面進行簡單數學運算的模板函數,包括加法和乘法在序列上的一些操作。<functional>中則定義了一些模板類,用以聲明函數對象。

❷ STL是什麼

STL是司太立合金的簡稱

司太立(Stellite)是一種能耐各種類型磨損和腐蝕以及高溫氧化的硬質合金。即通常所說的鈷基合金,司太立合金由美國人Elwood Hayness 於1907年發明。司太立合金是以鈷作為主要成分,含有相當數量的鎳、鉻、鎢和少量的鉬、鈮、鉭、鈦、鑭等合金元素,偶而也還含有鐵的一類合金。根據合金中成分不同,它們可以製成焊絲,粉末用於硬面堆焊,熱噴塗、噴焊等工藝,也可以製成鑄鍛件和粉末冶金件。

司太立合金鑄件適用於核電、石化、電力、電池、玻璃、輕工、食品等諸多領域。具有耐磨、耐蝕、抗氧化和耐高溫特性。常用的產品有閥芯、閥座、軸類、軸套、泵類部件,玻璃、電池模具、噴嘴及切割刀具等。合金類別有:Co基合金鑄件、Ni基合金鑄件、Fe基合金鑄件。司太立粉末冶金製品採用鈷基、鎳基或鐵基合金霧化粉末,經壓制、燒結、精加工製成。主要產品有閥桿、閥芯(球)、閥座、閥圈、密封環、木材鋸齒、軸承泵、軸承球等。

❸ PLC編程語言STL是什麼

PLC編程語言中的STL是步進觸點指令,用在步進梯形圖中。

❹ 簡述一下c++標准庫(stl)的內容

STL包括兩部分內容:容器和演算法。(重要的還有融合這二者的迭代器)
容器,即存放數據的地方。比如array等。
在STL中,容器分為兩類:序列式容器和關聯式容器。
序列式容器,其中的元素不一定有序,但都可以被排序。如:vector、list、deque、stack、queue、heap、priority_queue、slist;
關聯式容器,內部結構基本上是一顆平衡二叉樹。所謂關聯,指每個元素都有一個鍵值和一個實值,元素按照一定的規則存放。如:RB-tree、set、map、multiset、multimap、hashtable、hash_set、hash_map、hash_multiset、hash_multimap。
下面各選取一個作為說明。
vector:它是一個動態分配存儲空間的容器。區別於c++中的array,array分配的空間是靜態的,分配之後不能被改變,而vector會自動重分配(擴展)空間。
set:其內部元素會根據元素的鍵值自動被排序。區別於map,它的鍵值就是實值,而map可以同時擁有不同的鍵值和實值。
演算法,如排序,復制……以及個容器特定的演算法。這點不用過多介紹,主要看下面迭代器的內容。
迭代器是STL的精髓,我們這樣描述它:迭代器提供了一種方法,使它能夠按照順序訪問某個容器所含的各個元素,但無需暴露該容器的內部結構。它將容器和演算法分開,好讓這二者獨立設計。
簡單來說就這些,具體內容需要你仔細去了解。

❺ STL演算法庫中的演算法在使用時為什麼無須指定參數類型

舉個簡單的例子:

inta=1,b=2;
doublec=1,d=2;
sum(a,b);
sum(c,d);

看上去就只寫了一個函數sum(,);

實際上是對sum()進行重載了,這里有兩個函數:

intsum(int,int);
doublesum(double,double);

如果STL也這樣寫的話,那就多的去了,然後就出現了"函數模板"這個東西.

然後就可以寫成:

template<typenameAtype>
Atypesum(Atype,Atype);

這樣當你使用sum(a,b)的時候,它就會根據傳入的類型,自動生成對應的函數進行調用.

❻ STL中的演算法是對所有容器都適用嗎

c++ stl 標准模板庫 c++容器類vector . 向量容器deque 雙端隊列容器list 雙向鏈表容器slist 單向鏈表容器bit_vector 位向量容器set 集合容器multiset 多重集合容器map 映照容器multimap 多重映照容器hash_set 哈希集合容器hash_map 哈希映照容器string 基本字元序列容器stack 堆棧容器queue 隊列容器priority_queue 優先隊列容器 c++stl 演算法 逐個容器元素 for_each查找容器元素 find 條件查找 find_if鄰近查找容器 adjacent_find范圍查找容器元素 find_first_of統計等於某值的容器元素個數 count條件統計 count_if..這里還有很多很多 演算法 其中比較有用的sort 排序stable_sort 穩定排序反向元素 reverse旋轉 rotate

❼ 什麼是STL

它是由Alexander Stepanov、Meng Lee和David R Musser在惠普實驗室工作時所開發 出來的。現在雖說它主要出現在C++中,但在被引入C++之前該技術就已經存在了很長的 一段時間。 STL的代碼從廣義上講分為三類:algorithm(演算法)、container(容器)和iterator( 迭代器),幾乎所有的代碼都採用了模板類和模版函數的方式,這相比於傳統的由函數 和類組成的庫來說提供了更好的代碼重用機會。在C++標准中,STL被組織為下面的13個 頭文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<m ap>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。以下筆者就簡單 介紹一下STL各個部分的主要特點。 二、演算法 大家都能取得的一個共識是函數庫對數據類型的選擇對其可重用性起著至關重要的作用 。舉例來說,一個求方根的函數,在使用浮點數作為其參數類型的情況下的可重用性肯 定比使用整型作為它的參數類性要高。而C++通過模板的機制允許推遲對某些類型的選擇 ,直到真正想使用模板或者說對模板進行特化的時候,STL就利用了這一點提供了相當多 的有用演算法。它是在一個有效的框架中完成這些演算法的——你可以將所有的類型劃分為 少數的幾類,然後就可以在模版的參數中使用一種類型替換掉同一種類中的其他類型。 STL提供了大約100個實現演算法的模版函數,比如演算法for_each將為指定序列中的每一個 元素調用指定的函數,stable_sort以你所指定的規則對序列進行穩定性排序等等。這樣 一來,只要我們熟悉了STL之後,許多代碼可以被大大的化簡,只需要通過調用一兩個算 法模板,就可以完成所需要的功能並大大地提升效率。 演算法部分主要由頭文件<algorithm>,<numeric>和<functional>組成。<algorithm>是所 有STL頭文件中最大的一個(盡管它很好理解),它是由一大堆模版函數組成的,可以認 為每個函數在很大程度上都是獨立的,其中常用到的功能范圍涉及到比較、交換、查找 、遍歷操作、復制、修改、移除、反轉、排序、合並等等。<numeric>體積很小,只包括 幾個在序列上面進行簡單數學運算的模板函數,包括加法和乘法在序列上的一些操作。 <functional>中則定義了一些模板類,用以聲明函數對象。 三、容器 在實際的開發過程中,數據結構本身的重要性不會遜於操作於數據結構的演算法的重要性 ,當程序中存在著對時間要求很高的部分時,數據結構的選擇就顯得更加重要。 經典的數據結構數量有限,但是我們常常重復著一些為了實現向量、鏈表等結構而編寫 的代碼,這些代碼都十分相似,只是為了適應不同數據的變化而在細節上有所出入。ST L容器就為我們提供了這樣的方便,它允許我們重復利用已有的實現構造自己的特定類型 下的數據結構,通過設置一些模版類,STL容器對最常用的數據結構提供了支持,這些模 板的參數允許我們指定容器中元素的數據類型,可以將我們許多重復而乏味的工作簡化 。 容器部分主要由頭文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>組成 。對於常用的一些容器和容器適配器(可以看作由其它容器實現的容器),可以通過下 表總結一下它們和相應頭文件的對應關系。 數據結構 描述 實現頭文件 向量(vector) 連續存儲的元素 <vector> 列表(list) 由節點組成的雙向鏈表,每個結點包含著一個元素 <list> 雙隊列(deque) 連續存儲的指向不同元素的指針所組成的數組 <deque> 集合(set) 由節點組成的紅黑樹,每個節點都包含著一個元素,節點之間以某種作用於 元素對的謂詞排列,沒有兩個不同的元素能夠擁有相同的次序 <set> 多重集合(multiset) 允許存在兩個次序相等的元素的集合 <set> 棧(stack) 後進先出的值的排列 <stack> 隊列(queue) 先進先出的執的排列 <queue> 優先隊列(priority_queue) 元素的次序是由作用於所存儲的值對上的某種謂詞決定的的 一種隊列 <queue> 映射(map) 由{鍵,值}對組成的集合,以某種作用於鍵對上的謂詞排列 <map> 多重映射(multimap) 允許鍵對有相等的次序的映射 <map> 四、迭代器 下面要說的迭代器從作用上來說是最基本的部分,可是理解起來比前兩者都要費力一些 (至少筆者是這樣)。軟體設計有一個基本原則,所有的問題都可以通過引進一個間接 層來簡化,這種簡化在STL中就是用迭代器來完成的。概括來說,迭代器在STL中用來將 演算法和容器聯系起來,起著一種黏和劑的作用。幾乎STL提供的所有演算法都是通過迭代器 存取元素序列進行工作的,每一個容器都定義了其本身所專有的迭代器,用以存取容器 中的元素。 迭代器部分主要由頭文件<utility>,<iterator>和<memory>組成。<utility>是一個很小 的頭文件,它包括了貫穿使用在STL中的幾個模板的聲明,<iterator>中提供了迭代器使 用的許多方法,而對於<memory>的描述則十分的困難,它以不同尋常的方式為容器中的 元素分配存儲空間,同時也為某些演算法執行期間產生的臨時對象提供機制,<memory>中的 主要部分是模板類allocator,它負責產生所有容器中的默認分配器。 五、對初學者學習STL的一點建議 對於之前不太了解STL的讀者來說,上面的文字只是十分概括地描述了一下STL的框架, 對您理解STL的機制乃至使用STL所起到的幫助微乎甚微,這不光是因為深入STL需要對C ++的高級應用有比較全面的了解,更因為STL的三個部分演算法、容器和迭代器三部分是互 相牽制或者說是緊密結合的。從概念上講最基礎的部分是迭代器,可是直接學習迭代器 會遇到許多抽象枯燥和繁瑣的細節,然而不真正理解迭代器又是無法直接進入另兩部分 的學習的(至少對剖析源碼來說是這樣)。可以說,適應STL處理問題的方法是需要花費 一定的時間的,但是以此為代價,STL取得了一種十分可貴的獨立性,它通過迭代器能在 盡可能少地知道某種數據結構的情況下完成對這一結構的運算,所以下決心鑽研STL的朋 友們千萬不要被一時的困難擊倒。其實STL運用的模式相對統一,只要適應了它,從一個 STL工具到另一個工具,都不會有什麼大的變化。 對於STL的使用,也普遍存在著兩種觀點。第一種認為STL的最大作用在於充當經典的數 據結構和演算法教材,因為它的源代碼涉及了許多具體實現方面的問題。第二種則認為ST L的初衷乃是為了簡化設計,避免重復勞動,提高編程效率,因此應該是「應用至上」的 ,對於源代碼則不必深究。筆者則認為分析源代碼和應用並不矛盾,通過分析源代碼也 能提高我們對其應用的理解,當然根據具體的目的也可以有不同的側重。

❽ STL是什麼意思

什麼是STL呢?STL就是Standard
Template
Library,標准模板庫。這可能是一個歷史上最令人興奮的工具的最無聊的術語。從根本上說,STL是一些「容器」的集合,這些「容器」有list,vector,set,map等,STL也是演算法和其他一些組件的集合。這里的「容器」和演算法的集合指的是世界上很多聰明人很多年的傑作。
STL的目的是標准化組件,這樣就不用重新開發,可以使用現成的組件。STL現在是C++的一部分,因此不用額外安裝什麽。它被內建在你的編譯器之內。因為STL的list是一個簡單的容器,所以我打算從它開始介紹STL如何使用。如果你懂得了這個概念,其他的就都沒有問題了。另外,list容器是相當簡單的,我們會看到這一點。
在本文中我們將會看到如何定義和初始化一個list,計算它的元素的數量,從一個list里查找元素,刪除元素,和一些其他的操作。要作到這些,我們將會討論兩個不同的演算法,STL通用演算法都是可以操作不止一個容器的,而list的成員函數是list容器專有的操作。
這是三類主要的STL組件的簡明綱要。STL容器可以保存對象,內建對象和類對象。它們會安全的保存對象,並定義我們能夠操作的這個對象的介面。放在蛋架上的雞蛋不會滾到桌上。它們很安全。因此,在STL容器中的對象也很安全。我知道這個比喻聽起來很老土,但是它很正確。
STL演算法是標准演算法,我們可以把它們應用在那些容器中的對象上。這些演算法都有很著名的執行特性。它們可以給對象排序,刪除它們,給它們記數,比較,找出特殊的對象,把它們合並到另一個容器中,以及執行其他有用的操作。
http://www.yesky.com/255/1910755.shtml
還有一種解釋:
什麼是STL?
STL代表科學和技術素養,但這個短語的背後隱藏的重要意義是對所有人而言。
STL也許可以簡單地視為一個哲學觀點,但決不僅僅如此。它包括了一套完整的教育方法,這個方法包含生活中的科學技術和不僅是學校師生的還有普通市民和政治家在內的所有人的思想。
為了達到普及科學技術的要求,科學技術的排它性和教師\科學家對科學教育的態度要根本轉變。
課堂中的科學教育要從教師為主導、以教學大綱為核心的教育方式中解脫出來,代之以學生為中心來設計、指導和進行組織教學。為了使學生全身心投入學習動機是非常重要的而且這將只有在科學技術成為學生日常生活的需要時才能得到激發。
考慮到這些,我們現在是現代世界的一部分,這種意識比以前更為強烈,知識的獲取與事實的記憶日益無關。一個微型行動電話能夠直接接入網際網路。這是能夠在我們的指尖表達出一些事實信息。結果是學生在大量的事實學習(這是很快過時的知識)的思維負擔是明顯無意義的。
一旦這些負擔被減輕了,全體學生親自感受科學和技術的潛能就能被發掘出來。科學和技術不再被看作僅僅是』最聰明的』學生的寶貝。批判性思維得到解放。這些能揭示挑戰不可靠信息和無確實根據的個人觀點的思維方法,不管這些觀點是來自』專家』,還是廣告代理商或者政治家們。
現存的許多科學技術的排它性營造了道德和價值觀來自於藝術和人文的氛圍。實際上許多當前

❾ STL庫里的演算法時間復雜度和空間復雜度都是最佳的嗎

未必,時間復雜度和空間復雜度本來就很難兼得,很多情況下的需要作出更有利的取捨。但STL的實現都是出於計算機大神之手,肯定比我們自己寫的要精妙很多。比如常見的sort演算法採用的是綜合了快排、插排、堆排的優勢而設計出的Introspective Sorting,list的sort演算法並沒有採用單純的歸並,而是加入了多級存儲。

❿ C++標准庫主要就指STL嗎

關於STL的定義,不同人理解不一。現在有人直接把 STL 定義為「the standard library」,但通常而言, STL 指的是標准庫的容器、迭代器、演算法這幾個部分,而這遠不是C++標准庫的全部內容。

在C++開始標准化之時,一個名叫SGI STL的庫被標准委員會投入極大關注,後來被吸收進C++標准庫,主要構成 C++ 標准庫的容器庫(Containers library)、迭代器庫(Iterators library)、演算法庫(Algorithms library)部分。因此後人有時就直接用 STL 指代標准庫的容器、迭代器、演算法這幾個部分。
但是C++標准庫並非只含有容器、迭代器、演算法這幾個部分,其他的還有每個新手都會用到的輸入輸出庫(Input/output library,iostream、fstream都屬於這里),以及字元串庫(Strings library)、異常診斷庫(Diagnostics library,包括 std::logic_error、std::runtime_error等異常類,assert這樣的工具也屬於這里)、數值運算庫(Numerics library,包括 std::complex 以及相關的復數運算,隨機數生成等)、語言支持庫(Language support library)、Localization library等,以及C++11加入的正則表達式庫(Regular expressions library)、原子操作庫(Atomic operations library)、線程支持庫(Thread support library),和不好歸類的「通用工具庫」(General utilities library)等
顯然我們不能說「容器、迭代器、演算法」就是C++標准庫的全部,把「容器、迭代器、演算法」說成C++標准庫的主要部分恐怕也是有問題的

閱讀全文

與stl庫演算法相關的資料

熱點內容
程序員面試金典第6版 瀏覽:718
內存2g編譯安卓 瀏覽:414
單片機小數點怎麼亮 瀏覽:414
安卓手機怎麼設置健康碼雙擊兩下就出來 瀏覽:266
同一個文件夾可以存在兩個相同的文件嗎 瀏覽:535
動態重編譯jit 瀏覽:132
android藍牙音頻 瀏覽:451
mc國際版怎麼加伺服器 瀏覽:816
phphtaccess配置 瀏覽:747
dos命令鎖定 瀏覽:486
python中調換數據位置 瀏覽:300
武漢市中石油加油什麼APP優惠 瀏覽:545
程序員33歲以後的規劃 瀏覽:858
招標文件加密流轉 瀏覽:897
源碼數據盈利可信嗎 瀏覽:860
android閃爍圖標 瀏覽:942
程序員呼蘭搞笑 瀏覽:352
蘋果怎麼關閉自動排序app 瀏覽:963
國外可以訪問到用什麼伺服器地址 瀏覽:949
揚州前端程序員私活價格 瀏覽:990