1. 程式人生 > >STL(一)(container,algorithm,iterator)

STL(一)(container,algorithm,iterator)

STL中的sort(),因為封裝在名稱空間std中,STL中的sort()演算法編譯為std::sort(),從而避免了名字名字衝突。
則有檔案開頭必加:using namespace std;
STL演算法:用來操作容器中資料的模板函式,主要由標頭檔案(“algorithm”,“numeric”,“functional”)組成。
STL大概包含了100個實現演算法的模板函式,
eg:
STL用sort()對一個vector中的資料進行排序,用find搜尋一個list中的物件。STL不僅可以對內建資料型別的資料進行排序,也可以對自定義的結構體資料排序,不僅可以遞增排序,也可按照程式設計師的要進行排序(如遞減)。
algorithm: 增,刪,改,查,複製,排序,合併。
numeric: 只包含幾個簡單的數學運算的模板函式。
functional:其中定義了一些模板類,用於宣告關係函式物件。
eg一個吧:
#include
using namespace std;
void main()
{
int a[] = { 2, 5, 4, 1, 3 };
sort(a, a + 5);
for (int i = 0; i < 5; i++)
printf("%d", a[i]);
printf("/n");
}
STL迭代器:用於訪問容器中的資料物件。如何訪問只有容器自己知道。
常有迭代器:
(1)iterator指向容器中存放元素的迭代器,正向遍歷容器中的元素。
(2)const_iterator:指向容器中存放元素的常量迭代器,只能讀取容器中的元素。
(3)reverse_iterator:指向容器中存放元素的反向迭代器,反向遍歷容器中的元素。
(4)const_reverse_iterator:指向容器中存放元素的常量反向迭代器,只能讀取容器中的元素。
下面以一個程式4次分別實現:
(1)#include
using namespace std;
void main()
{
vectormyv;
vector::iterator it;
myv.push_back(1);
myv.push_back(2);
myv.push_back(3);
for (it=myv.begin(); it!= myv.end(); ++it)
printf("%d", *it);
printf("\n");
}
(2)
#include
using namespace std;
void main()
{
vectormyv;
vector::const_iterator it;
myv.push_back(1);
myv.push_back(2);
myv.push_back(3);
for (it=myv.begin(); it!= myv.end(); ++it)
printf("%d", *it);
printf("\n");
}
(3)
#include
using namespace std;
void main()
{
vectormyv;
vector::reverse_iterator it;
myv.push_back(1);
myv.push_back(2);
myv.push_back(3);
for (it=myv.rbegin(); it!= myv.rend(); ++it)
printf("%d", *it);
printf("\n");
}
(4)
#include
using namespace std;
void main()
{
vectormyv;
vector::const_reverse_iterator it;
myv.push_back(1);
myv.push_back(2);
myv.push_back(3);
for (it=myv.rbegin(); it!= myv.rend(); ++it)
printf("%d", *it);
printf("\n");
}