STL 使用技巧

2021-06-16 21:11:28 字數 2157 閱讀 4463

今天寫了乙個程式,需要用到排序,還有容器。那不用說,在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::iterator it;

for(it = lsttmp.begin(); it != lsttmp.end(); it++)

list 還有insert、clear 等函式,這些稍微查一下msdn就知道了,上面是幾個比較常遇到的問題,就先說到這裡了。

正確使用 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都比它快些使用的話,主要...