STL - 6 - 标准模板库

本文详细介绍了C++标准模板库(STL)的十大容器,包括线性容器、适配器容器和关联容器,以及向量的基本特性和实例化方式。深入探讨了向量的连续内存空间特性、动态内存管理机制和迭代器使用方法。

六、标准模板库(Standard Templates Library,STL)

1.十大容器

(1)线性容器

  • 向量(vector):单端开放的动态数组,只能在尾端
  • 双端队列(deque):双端开放的动态数组
  • 列表(list):双向线性链表

(2)适配器容器

  • 堆栈(stack):后进先出
  • 队列(queue):先进先出
  • 优先队列(priority_queue):优先级高先出(默认谁大先先出)

(3)关联容器

  • 映射(map):以键作为基准的存放键—值对的平衡有序二叉树。键必须唯一!
  • 多重映射(multimap):允许键重复的映射。
  • 集合(set):映射的简化形式,只有键,没有值。
  • 多重集合(multiset):只有键没有值的多重映射。

2.向量

(1)基本特性

  • 连续内存空间,提供通过下标访问元素的方式。O(1)
  • 动态内存管理,同时也支持静态预分配。

(2)实例化:#include <vector>

  • 空向量:vector<元素类型>  向量对象;
  • vector<int> vi;
    cout << vi.size() << endl; // 0
    cout << sizeof(vi) << endl; //12
  • 预分配:vector<元素类型>  向量对象(初始大小);
  • vector<int> vi(3); //0 0 0
    基本类型:用相应类型的“0”初始化
    类类型:调用缺省构造函数初始化
  • 设初值:vector<元素类型>  向量对象(初始大小,初值);
  • vector<int> vi(3,5); //5 5 5
    vector<Student> vs(3,Student("张飞“,20));

从其他容器复制:vector<元素类型>  向量对象(源起始迭代器,源终止迭代器);

注意:在STL中凡是提高一个范围的终止迭代器,其实是指该范围中最后一个元素的下一个位置迭代器。

(3)迭代器

         在STL中只有向量和双端队列这两个容器采用的是连续内存的存储结构,因此这有他们的迭代器是堆积迭代器,而其他容器都只提供顺序迭代器。

  • A:随机迭代器与顺序迭代器:随机迭代器比顺序迭代器增加了如下功能:
    • 可以和整数做加减运算——一次迭代多个位置
    • 同型迭代器可以做大小比较——反映了元素的顺序
    • 同型迭代器其可以做相减运算——反应了元素的距离
  • B:四个迭代器类型
    • 正向可写迭代器:
    • 正向只读迭代器:
    • 反向可以迭代器:
    • 反向只读迭代器:
  • C:八个特征迭代器:
    • begin()
    • begin()const
    • end()
    • end()const
    • rbegin()
    • rbegin()const
    • rend()
    • rend()const
      • 正向迭代器:起始->首元素,终止->尾元素之后,增向尾,减向头
      • 反向迭代器:起始->尾元素,终止->首元素之前,增向头,减向尾
      • 可写迭代器:可被视如普通指针,可修改其目标元素的值。
        •  
      • 只读迭代器:可被视如敞亮指针,不可修改其目标元素的值。

 

转载于:https://my.oschina.net/cotsnail/blog/759656

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值