『壹』 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呢?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中都是一些應用比較廣泛的演算法
而你這個需求明顯是一個比較特例的 不常用 STL中不太可能收錄
你可以自己寫一個函數執行這樣的功能 把需要計算的vector和相關參數傳進去就可以了
『肆』 STL的演算法
大家都能取得的一個共識是函數庫對數據類型的選擇對其可重用性起著至關重要的作用。舉例來說,一個求方根的函數,在使用浮點數作為其參數類型的情況下的可重用性肯定比使用整型作為它的參數類型要高。而C++通過模板的機制允許推遲對某些類型的選擇,直到真正想使用模板或者說對模板進行特化的時候,STL就利用了這一點提供了相當多的有用演算法。它是在一個有效的框架中完成這些演算法的——你可以將所有的類型劃分為少數的幾類,然後就可以在模版的參數中使用一種類型替換掉同一種類中的其他類型。
STL提供了大約100個實現演算法的模版函數,比如演算法for_each將為指定序列中的每一個元素調用指定的函數,stable_sort以你所指定的規則對序列進行穩定性排序等等。這樣一來,只要我們熟悉了STL之後,許多代碼可以被大大的化簡,只需要通過調用一兩個演算法模板,就可以完成所需要的功能並大大地提升效率。
演算法部分主要由頭文件<algorithm>,<numeric>和<functional>組成。<algorithm>是所有STL頭文件中最大的一個(盡管它很好理解),它是由一大堆模版函數組成的,可以認為每個函數在很大程度上都是獨立的,其中常用到的功能范圍涉及到比較、交換、查找、遍歷操作、復制、修改、移除、反轉、排序、合並等等。<numeric>體積很小,只包括幾個在序列上面進行簡單數學運算的模板函數,包括加法和乘法在序列上的一些操作。<functional>中則定義了一些模板類,用以聲明函數對象。
『伍』 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)的時候,它就會根據傳入的類型,自動生成對應的函數進行調用.
『陸』 C++的STL是如何實現演算法和數據結構分離的
STL看起來是使用了面向對象,但實際上是大部分都是面向過程了。
STL的很多演算法,就拿sort函數來說吧。
void sort(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp);
只要數據結構的跌代器是隨機訪問的就可以使用。比如vector,
list,同時也兼容普通數組int[]。
這里說到跌代器,STL有一整套跌代器的實現標准:
1、實現begin和end函數,是要全局的
如vecotr:
vecotr<T>::Iterator begin(vecotr<T>);
而不是
vecotr<T>的成員函數begin,這點要區分。
2、跌代器實現前至++運算
3、跌代器實現
*
運算
4、跌代器實現
!=
運算
基本這四點就可以完成了,可以根據這個規則自己實現一個跌代器。
有了跌代器後,那麼對於演算法來說他們基本就一樣了,開頭,結尾,自增,以次訪問就可以了。
所以一個sort就可以
vecotr<int> a;
string b;
list<float> c;
sort(a.begin(), a.end());
sort(b.begin(),b.end());
sort(c.begin(),c.end());
static bool less(int a1, int a2)
{
return a1 < a2;
}
sort(a.begin(), a.begin()+5, less); // 對前5個排序
sort(a.begin(), a.end(), less);
sort(a.begin(), a.end(), [](int a1, int a2) {
return a1 <= a2; // 匿名函數
});
結論就是演算法跟數據結構是通過跌代器進行溝通的,所以學好跌代器,STL才算學好,要會用,也要懂為原理。
『柒』 stl 通用演算法中的remove()和list容器的remove()函數是一樣的么
你的猜測完全正確,下面是示例驗證程序,和輸出結果
list<int> l1,l2;
print("list 1:");
push_order(l1);
print(l1.begin(),l1.end());
remove_if(l1.begin(),l1.end (),is_odd);
print(l1.begin(),l1.end());
print("list 2:");
push_order(l2);
print(l2.begin(),l2.end());
l2.remove_if(is_odd);
print(l2.begin(),l2.end());
輸出:
list 1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
2 4 6 8 10 12 14 16 18 20 11 12 13 14 15 16 17 18 19 20
list 2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
2 4 6 8 10 12 14 16 18 20
請按任意鍵繼續. . .
『捌』 STL 演算法問題
IsAToothbrush 是函數對象(function object),如果可以,關於這個概念還是建議你翻一下手頭的書,你就明白了。函數對象的定義就是一個類重載了()運算符,而函數count_if 需要一個函數對象(我對stl也不完全了解,不知道這里傳一個函數指針是不是也是可以的,但是例子裡面用的是函數對象),這個對象的作用就是 count_if函數執行的時候,會遍歷集合的元素,用調用operator()來判斷是否要刪除某個元素
『玖』 PLC編程語言STL是什麼
PLC編程語言中的STL是步進觸點指令,用在步進梯形圖中。