C++基础学习笔记----STL初识

1、STL的基本概念

  • STL(Standard Template Library)标准模板库
  • STL从广义上分为:容器(container)、算法(algorithm)、迭代器(iterator)
  • 容器和算法之间通过迭代器进行链接
  • STL标准模板库几乎所有的代码都采用模板类和模板函数

2、STL六大组件

  • 容器:各种数据类型,如:vector、list、deque、set、map等,用来存放数据。
  • 算法:各种常用算法,如:sort、find、copy、for_each等。
  • 迭代器:扮演了容器与算法之间的粘合剂。
  • 仿函数:行为类似函数,可以作为算法的某种策略。
  • 适配器:用来修饰容器、仿函数或者迭代器接口。
  • 空间配置器:负责空间的配置和管理
    3、容器
    STL容器就是将运用最广泛的一些数据结构实现出来,用于保存数据、处理数据。
    常用的数据结构:数组、链表、树、栈、队列、集合,映射等。
    容器分为序列式容器和关联式容器两种:
    序列式容器:即以线性排列(类似普通数组的存储方式)来存储某一指定类型(例如 int、double 等)的数据,需要特殊说明的是,该类容器并不会自动对存储的元素按照值的大小进行排序。
    关联式容器
  • 二叉树结构,个元素之间没有严格的物理上的顺序关联。
  • STL 关联容器分为 set(集合)和 map(映射表)两大类,及其衍生体 multiset 和 multimap。这些容器的底层机制均以 RB-tree(红黑树)实现。RB-tree 也是一个独立容器,但并不开放使用
    4、算法:问题的解决方法
    算法分为质变算法非质变算法
    质变算法:是指运算过程中会更改区间内的元素的内容。例如拷贝、替换,删除等。
    非质变算法:指运算过程中不会改变区间内的元素的内容,例如查找、技术、遍历等。
    5、迭代器
    标准库为每一种标准容器(包括vector)定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。因为迭代器对所有的容器都适用,现代 C++ 程序更倾向于使用迭代器而不是下标操作访问容器元素,即使对支持下标操作的vector 类型也是这样。

容器的iterator 类型

每种容器类型都定义了自己的迭代器类型,如vector:

vector<int>::iterator iter;

这个语句定义了一个名为 iter 的变量,它的数据类型是 vector 定义的 iterator 类型。每个标准库容器类型都定义了一个名为 iterator 的成员,这里的 iterator 与迭代器实际类型的含义相同。
begin 和 end 操作

每种容器都定义了一对命名为 begin 和 end 的函数,用于返回迭代器。如果容器中有元素的话,由 begin 返回的迭代器指向第一个元素:

 vector<int>::iterator iter =ivec.begin();

上述语句把 iter 初始化为由名为 vector 操作返回的值。假设 vector 不空,初始化后,iter 即指该元素为 ivec[0]。

由 end 操作返回的迭代器指向 vector 的“末端元素的下一个”。“超出末端迭代器”(off-the-enditerator)。表明它指向了一个不存在的元素。如果 vector 为空,begin 返回的迭代器与 end 返回的迭代器相同。

由 end 操作返回的迭代器并不指向 vector 中任何实际的元素,相反,它只是起一个哨兵(sentinel)的作用,表示我们已处理完 vector 中所有元素。

vector 迭代器的自增和解引用运算

迭代器类型定义了一些操作来获取迭代器所指向的元素,并允许程序员将迭代器从一个元素移动到另一个元素。

迭代器类型可使用解引用操作符(*)来访问迭代器所指向的元素:

 *iter = 0;

解引用操作符返回迭代器当前所指向的元素。假设 iter 指向 vector 对象ivec 的第一元素,那么 *iter 和 ivec[0] 就是指向同一个元素。上面这个语句的效果就是把这个元素的值赋为0。

迭代器使用自增操作符向前移动迭代器指向容器中下一个元素。从逻辑上说,迭代器的自增操作和 int 型对象的自增操作类似。对 int 对象来说,操作结果就是把 int 型值“加 1”,而对迭代器对象则是把容器中的迭代器“向前移动一个位置”。因此,如果 iter 指向第一个元素,则 ++iter 指向第二个元素。

由于 end 操作返回的迭代器不指向任何元素,因此不能对它进行解引用或自增操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值