STL笔记

STL的基本概念:

  1-容器:是可容纳各种类型的数据结构,是 类模板

  2-迭代器:是用于依次存放容器中的元素,类似指针

  3-算法: 是用于操作容器中元素的 函数模板

       sort() 用来对 vector 中的数据进行排序。

       find() 用来搜索 list 中的对象。

      算法本身与他们操作的数据类型无关,因此他们可以在从简单数组到高度复杂容器的任何数据结构上使用。

如 int  a[100]:

  该数组就是容器,而int * 类型的指针变量就可以作为迭代器,sort算法可以作用在该容器上,对其排序:

  sort(a,a+50); //对前50个元素进行排序

容器种类:

  顺序容器: vector(数组) ,deque (双向队列),list(双向链表) 

  关联容器:set ,multiset ,map ,multimap  // 都能对输入数据进行排序

  容器适配器: stack ,queue ,priority_queue

  PS:对象被插入容器中时,被插入的是对象的一个复制品

容器 容器上的迭代器访问
vector 随机访问(通过下标就能取到元素)
deque 随机访问
list 双向(不能用下标取元素)
set/multiset 双向
map/multimap 双向
   
stack 不支持迭代器(元素只能在对头或对尾被访问)
queue 不支持迭代器
priority_queue 不支持迭代器

 

  如vector 的迭代器是随机迭代器,遍历vector可以有以下几种方法:

  

vector<int> v(10);
int i;
for (int i = 0; i < v.size; ++i)
{
    cout << v[i]; //根据下标随机访问
}
vector<int>::const_iterator it;
for(it = v.begin(); it != v.end(); ++it)
    cout << *it;
for(it = v.begin(); it < v.end(); ++it) 
    cout << *it;

  

 list的迭代器是双向迭代器,正确遍历方法为:

list<int> v;
list<int>::const_iterator it;
for(it = v.begin(); it != end(); ++it)
    cout << *it;

`  错误做法:

for(it = v.begin(); it < v.end(); ++it)
        cout << *it;
    或
    for (int i = 0; i < v.size; ++i)
        cout << v[i];
    //双向迭代器不支持 <,list没有[]成员函数

 

 

 

  

posted @ 2018-06-02 11:35  落花人独立微雨燕双飞  阅读(222)  评论(0编辑  收藏  举报
欢迎访问我的CSDN博客