Posted on 2012-07-15 18:14
S.l.e!ep.¢% 閱讀(730)
評論(0) 編輯 收藏 引用 所屬分類:
C++
.
2011-01-13 09:572072人閱讀評論(0)收藏舉報(bào)
今天又忘了怎么在vector中查找某一個(gè)值。。唉。。每次都忘。?,F(xiàn)在記下來。。(- -!)
stl包括容器、迭代器和算法:
容器 用于管理一些相關(guān)的數(shù)據(jù)類型。每種容器都有它的優(yōu)缺點(diǎn),不同的容器反映出程序設(shè)計(jì)的不同需求。容器自身可能由數(shù)組或鏈表實(shí)現(xiàn),或者容器中的每個(gè)元素都有特殊的關(guān)鍵值。
迭代器 用于遍歷一個(gè)數(shù)據(jù)集中的每個(gè)元素。這些數(shù)據(jù)集可能是容器或者容器的子集。迭代器的主要優(yōu)點(diǎn)是它們?yōu)槿我忸愋偷娜萜魈峁┮粋€(gè)小巧并且通用(注意通用很重要)的接口。例如,迭代器接口的一個(gè)操作是讓它依次遍歷數(shù)據(jù)集的每個(gè)元素。這個(gè)操作是依賴容器的內(nèi)總部結(jié)構(gòu)獨(dú)立完成的。迭代器之所以有效是因?yàn)槿萜黝愄峁┧约旱牡黝愋蛠碜觥罢_的事”,容本身的迭代器了解容器的內(nèi)部結(jié)構(gòu)。
迭代器的接口幾乎相當(dāng)于普通的指針。讓一個(gè)迭代器遞增只需調(diào)用++操作符。使用*操作符可以得到迭代器引用的數(shù)據(jù)值。因而迭代器可以被任為是一種智能指針。
算法 被用于處理數(shù)據(jù)集中的元素。例如它們可以搜索、排序、修改數(shù)據(jù)或者其他目的。算法使用迭代器,因此,一個(gè)算法只需被編寫一次就可以用于任意的容器,因?yàn)榈鞯慕涌趯λ蓄愋偷娜萜魇峭ㄓ玫?。這就是find()的位置
為了給算法更多的擴(kuò)展性,需要提供一些被算法調(diào)用的附屬函數(shù)。可以使用通用算法去適應(yīng)非常特別和復(fù)雜的需求。你可以提供自己的搜索標(biāo)準(zhǔn)或者特殊的操作去綁定元素。
STL的概念是將數(shù)據(jù)和操作獨(dú)立開來。數(shù)據(jù)由容器類管理,而操作是由可配置的算法定義。迭代器則是這兩個(gè)元素之間的線索。它允許任何算法和容器的交互。
在某種意義上,STL的概念有勃于面向?qū)ο缶幊痰某踔裕篠TL將數(shù)據(jù)和算法分離而非綁定它們。然而,這樣做的理由非常重要:原則上,你可以將任何容器同任何算法綁定,得到的結(jié)果是STL是非??蓴U(kuò)展的。
STL的一個(gè)標(biāo)準(zhǔn)是它支持任意數(shù)據(jù)類型。“標(biāo)準(zhǔn)模板庫”意味著,所有部分是適應(yīng)任意類型的模板。STL是通用編程的例子。容器和算法對任意類型和類都是通用的。
STL甚至提供更多的通用組件。使用 適配器 和函數(shù)體,你可以為特定需要補(bǔ)充、限制和配置算法和接口。
一個(gè)find Vector的例子(BAIDU里找的),注意find不屬于vector的成員,而存在于算法中,應(yīng)加上頭文件#include
:
#include
#include
#include
int main( )
{
using namespace std;
vector L;
L.push_back( 1 );
L.push_back( 2 );
L.push_back( 3 );
L.push_back( 4 );
L.push_back( 5 );
vector::iterator result = find( L.begin( ), L.end( ), 3 ); //查找3
if ( result == L.end( ) ) //沒找到
cout << "No" << endl;
else //找到
cout << "Yes" << endl;
}