STL概述
STL的一个重要的特点:数据结构和算法的分离。
为了避免和其他头文件冲突,STL的头文件中不再使用常规的.h扩展,例如包含string类、迭代器和算法:
#include <string>
表 1. STL头文件和容器类
#include |
Container Class |
|
<deque> |
deque |
|
<list> |
list |
|
<map> |
map, multimap |
|
<queue> |
queue, priority_queue |
|
<set> |
set, multiset |
|
<stack> |
stack |
|
<vector> |
vector, vector<bool> |
命名空间
using namespace std;
迭代器
迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。迭代器就如同一个指针。事实上,c++的指针也是一种迭代器。但是迭代器不仅仅是指针,因此它们不一定具有地址。
迭代器的类型
对于STL数据结构和算法,可以使用五种迭代器:
尽管各种不同的STL实现细节方面有所不同,可以把上边的迭代器想象为一种继承关系,下面的迭代器继承自上面的迭代器。
指针迭代器
下面的程序显示了,一个指针也是一个迭代器,同时也显示了STL一个主要特征:STL不只能够用于自己的类类型,而且可以用于任何的c或者c++类型(这句什么意思?)
#include <iostream.h>
#include <algorithm>
using namespace std;
#define SIZE 100
int iArray[SIZE];
int main(int argc,char *argv[])
{
iArray[20] = 50;
int *ip = find(iArray,iArray+50,50);
if (ip == iArray+SIZE)
{
cout<<"没有找到搜索的元素"<<endl;
}
else
{
cout<<*ip<<" 在数组中找到"<<endl;
}
return 0;
}
容器迭代器
容器迭代器和c++的指针虽然都是迭代器,但是和指针变量不同的是,可以使用容器类的方法获得迭代器的对象,例如begin()和end(),rbegin()和rend()等。
#include <iostream.h>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> intVector(100);
int main(int argc,char *argv[])
{
//iArray[20] = 50;
intVector[20] = 50;
vector<int>::iterator ivalue = find(intVector.begin(),intVector.end(),50);
if (ivalue != intVector.end())
{
cout<<"向量中包括值"<<*ivalue<<endl;
}
else
{
cout<<"向量中不包括指定的值"<<endl;
}
return 0;
}
(待续。。。。。。)