欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

STL笔记

程序员文章站 2022-04-04 17:49:56
STL的基本概念: 1-容器:是可容纳各种类型的数据结构,是 类模板。 2-迭代器:是用于依次存放容器中的元素,类似指针。 3-算法: 是用于操作容器中元素的 函数模板。 sort() 用来对 vector 中的数据进行排序。 find() 用来搜索 list 中的对象。 算法本身与他们操作的数据类 ......

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没有[]成员函数