STL 乱学二(原创)

STL 乱学二(原创)
1.容器
   顺序: vector(类似动态增长数组)  deque (双端队列)  list(双头指针)
   关联:set  multiset(有重复)  map   multiset(有重复) ,自动排序(内部2叉树)
  特殊预定义容器:stack, queue ,prority queue
2.迭代器
      每种容器都提供了自己的迭代器,相同的操作界面,不同的内部实现,
   *,->,==,!=,++,--共同操作
     随机iterator : 支持 >,<:如:vector, deque,string
    双向iterator:不支持>,<:
   特殊预定义:
插入迭代器
          insert iterator:引起自动增长,非覆盖
             back_inserter(container)
             front_inserter(container)
           inserter(container,pos)//调用 container.insert()//每种容器都具有insert()//关联容器唯一
 流迭代器
             istream_iterator
             ostream_iterator
 逆向迭代器
容器中元素应满足:
     有拷贝构造,赋值运算符,析构能销毁
   顺序:默认构造应该可用
   关联:必须有排序准则
容器中是 值不是引用

通用操作:
   containertype c;
  ct  c(c1);
  ct   c(begin,end);
 c.~ct();
 c.size(), c.max_size(),c.empty(),c1==c2;c1<c2;c1.swap(c2); swap(c1,c2);c.begin();c.end();c.rbegin();c.rend();
c.inert(pos,elem);c.erase(begin,end),c.clear(),c.get_allocator
 
     3.vector
    动态增长数组,在队尾插入,删除效率高
注意 动态增长时 迭代器失效 内部可能要重配置
除了clear(),vector 不会自动缩小
vector 的迭代器 就是 元素的native指针,连续存储,迭代器是个random
空判断
       a.begin==a.end

4.list 
   迭代器是个双向的,非连续存储,而且是个环状链表在尾端是个未初始化节点
空判断
   a.begin==a.end;
clear  remove  unique(把相同元素移出,留一个)  insert
只能使用成员函数 sort,不能使用 算法 sort(他只接受random iterator)
5 .deque
动态增长的双端队列 ,但内部机制和vector 不一样 ,若干连续存储的集合
算法复杂度高,如排序时可将 其复制到 vector中,头/尾插入/删除效率高  ,
提供随机迭代器
6.stack (container adapter)
先进后出,不供迭代器, 不提供走访功能
7.queue(container adapter)
  先进先出,不提供迭代器,不提供走访功能
8.heap 辅助
   其内部为一个完全2叉树,插入时自动排序,一般为max_heap
   左右无序,某节点 i, 父节点 i/2,左子节点 2i,右子节点 2i+1;
 
template<class RandomAccessIterator> inline   void make_heap(      RandomAccessIterator First,      RandomAccessIterator Last   )template<class RandomAccessIterator> inline   void sort_heap(      RandomAccessIterator First,      RandomAccessIterator Last   )template<class RandomAccessIterator> inline   void push_heap(      RandomAccessIterator First,      RandomAccessIterator Last   )template<class RandomAccessIterator> inline   void pop_heap(      RandomAccessIterator First,      RandomAccessIterator Last   )
         
             9.set,关联容器 ,底层以rb-tree 实现,其迭代器为个const iterator
   不能用迭代器来改变 元素值,缺省下以递增排序

你可能感兴趣的:(STL 乱学二(原创))