现在的位置: 首页 > 综合 > 正文

STL学习(一)

2013年10月07日 ⁄ 综合 ⁄ 共 1575字 ⁄ 字号 评论关闭

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数据结构和算法,可以使用五种迭代器:

  •  Input iterators 提供对数据的只读访问。
  •  Output iterators 提http://write.blog.csdn.net/postedit/7411459供对数据的只写访问。
  •  Forward iterators 提供读写操作,并能向前推进迭代器。
  •  Bidireactional iterators 提供读写操作,并能向前和向后操作。
  •  Random access iterators 提供读写操作,并能在数据中随机移动。

        尽管各种不同的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;
}

    (待续。。。。。。)

抱歉!评论已关闭.