STL组件之容器

来源:互联网 发布:中国经济走势 知乎 编辑:程序博客网 时间:2024/05/31 06:23
  • 容器:管理某类对象的集合
  • 迭代器:在一个对象集群的元素进行遍历,为所有的容器提供一组很小的公共接口,与指针类似,以operator++累进,以operator*提所指值
  • 算法:处理集群内的元素

STL的一个根本特性:所有组件都可以针对任意types运作。

  1. 序列式容器
    可序群集,有vector, deque, list

    • vector:将元素置于dynamic array中管理,允许随机存取
    • deques(double-ended-queue):一个dynamic array,可以向两端发展,不论在尾部还是头部安插元素都很迅速,在中间部分,要移动元素。
    int main(){deque<float> coll;for(int i=1;i<=6;i++){    coll.push_front(i*1.1);}for(int i=0;i<coll.size();i++)cout<<coll[i]<<' ';cout<<endl;} 
    • list:双向链表,list的每个元素都以一部分内存指示其前驱元素和后继元素。存取动作花费线性时间,但是安插或删除动作迅速。
#include <iostream>#include <list>using namespace std;int main(){list<char> coll;for(char c='a';c<='z';c++)  coll.push_back(c);  while(!coll.empty())  {    cout<<coll.front()<<' ';    coll.pop_front();  }  cout<<endl;}
  • string: 也可当作STL容器,与vector类似,只是元素是字符
  • array: 长度固定的数组,作为初始化行时很有用
#include <array>...using namespace std;array<int,5> ai;//产生一个有5个int的数组array<double,4> ad={1.2,2.1,3.43,4.3};array<double,4> a;a=ad;//valid for array objects of same size;

说明:在C++11中,可将列表初始化用于vector和array对象,在C++98中,不能对vector对象这样做。


  1. 关联式容器
    关联式容器依据特定的排序规则,自动为其元素排序,缺省情况下,以operator <进行比较。也可以提供自己的比较函数,定义出不同的排序规则。

    • set: set的内部元素依据其值自动排序,每个元素值只出现一次
    • multiset: 和set相同,允许重复元素
    • map: 元素是“实值/键值”所组成的一个对组,根据键排序,每一个键只能出现一次
    • multimap: 与map相同,允许重复元素

  1. 容器配接器
    • stack: LIFO
    • queue: FIFO
    • priority queue: 每个元素拥有不同的优先权,排序规则(缺省使用operator <),下一个元素永远是优先级最高的元素。
0 0
原创粉丝点击