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