今天寫了乙個程式,需要用到排序,還有容器。那不用說,在vc裡肯定直接想到stl了,容器我選擇了list,list是最靈活的,效率也高。然後發現使用起來不是那麼得心應手,雖然都知道在**找到答案,但畢竟要查就不是那麼順手了。所以寫完後趕快記錄下來。以便以後返查,順便開個文章專門講stl使用的技巧。當然,如果以後再有心得,這文章就會繼續增加。
這次主要用了list,所以下面記錄幾個list可能平時比較難解決的問題。
list如何排序,公升序和降序?
把資料加進list中之後,要排序就簡單了,就呼叫它的sort()函式就行了,例如:listlst;
lst.push_back(1);
lst.push_front(2);
lst.push_back(5);
lst.sort();
這樣的話,lst裡本來是2、1、5的順序排列的,sort之後就變成了1、2、5也就是公升序排列。
那如果我們要降序排列呢?可以這樣:
lst.sort( greater() );
這樣的話,list裡面就變成了5、2、1的順序了!
list容器如何容納自定義型別?
上面的那個list是容納了int型別,如果我們要容納自定義的型別怎麼辦呢??首先我們需要定義乙個類,比如下面的這個類:
class cstyleandcount
cstyleandcount& operator = (const cstyleandcount &other)
friend int operator<(const cstyleandcount &left,
const cstyleandcount &right)
friend int operator>(const cstyleandcount &left,
const cstyleandcount &right)
cstring m_strstylecount;
cstring m_strcount;
int m_ncount;};
我們可以看到,這個類裡過載了幾個運算子,<、>、=,這幾個運算子過載了之後,那list就可以容納我們的自定義型別了,本來 > 都不用過載,但為了能降序排列,就要做多一步了。
接下來的使用和上面第乙個問題的使用一樣了!
遍歷list?
本來stl裡的遍歷都很簡單,沒什麼好說的,但這裡主要說一下如果需要改變list某個節點裡的數值,那就要用指標訪問了。list 還有insert、clear 等函式,這些稍微查一下msdn就知道了,上面是幾個比較常遇到的問題,就先說到這裡了。例如:list::iterator it;
for(it = lsttmp.begin(); it != lsttmp.end(); it++)
正確使用 stl map 的刪除節點***
stl的map表裡有乙個erase方法用來從乙個map中刪除掉指令的節點
eg:mapmaptest;
typedef map::iterator iter;
iter iter=maptest.find(key);
maptest.erase(iter);
像上面這樣只是刪除單個節點,map的形為不會出現任務問題,
但是當在乙個迴圈裡用的時候,往往會被誤用,那是因為使用者沒有正確理解iterator的概念.
像下面這樣的乙個例子就是錯誤的寫法,
eg.for(iter iter=maptest.begin();iter!=maptest.end();++iter)
{cout可以用以下方法解決這問題:
正確的寫法
1.使用刪除之前的迭代器定位下乙個元素。stl建議的使用方式
for(iter iter=maptest.begin();iter!=maptest.end();)
{cout2. erase() 成員函式返回下乙個元素的迭代器
for(iter iter=maptest.begin();iter!=maptest.end();)
{cout
STL 什麼是STL 使用STL的好處
標準模板庫,由惠普實驗室開發的一系列的標準化的元件,目前是c 的一部分。stl的 廣義上講,分為三類 容器 迭代器 演算法,容器和演算法是通過迭代器無縫連線,string和wstring也是stl的一部分,內嵌在c 的編譯器中。特點 資料結構 容器 和演算法的分離,演算法有乙份即可,比如sort排序...
STL中的Traits程式設計技巧
stl原始碼剖析 一書中提到traits程式設計技法,它的作用是獲取型別 associated type 的特性。這樣講比較抽象,到底什麼是相應型別,或者到底什麼時候需要用到traits程式設計技法呢?先來看乙個例子。假設有這麼乙個函式,接受乙個iterator,返回這個iterator所指代的型別...
一些stl 小技巧
大部分都是網上總結的 滑稽 1.一些非常實用的函式,比如說找到下乙個排列的 2.在3.vector代替queue和stack還能稍微快一些。所以不建議使用queue和stack,內建的棧和佇列出奇的慢。4.優先佇列,維護數列的極大值,效率很慢,比手寫二叉堆還慢不少,好像set都比它快些使用的話,主要...