C++的标准模板库(STL)即是公共数据结构的实现。表ADT就是在STL中实现的数据结构之一。这些数据结构称为集合或容器。
表ADT的两个实现:vector和list。vector给出表ADT的可增长的数组实现。优点是在常量时间内可索引,缺点是插入或删除操作代价高。list提供表ADT的双向链表实现。优点是,若变化位置已知,则插入和删除代价很小,缺点是不好索引。
对所有STL容器都适用的三个方法:
vector和list(此处指双向链表)都支持在常量时间内访问表的前端的项。
仅对list有效的方法:
vector特有的方法:前两个可以高效索引,后两个允许观察和改变其内部容量。
迭代器
在表的中部进行插入和删除操作,需要位置标记。在STL中,通过内置类型iterator来给出位置。例如:
对
list<string>
,类型
list<string>::iterator
给出位置;
对
vector<int>
,类型
vectoy<int>::iterator
给出位置;
以此类推。
关于迭代器的三个问题:
1.获得迭代器
2.迭代器的方法
迭代器最常见的操作
3.哪些表ADT需要迭代器作为形参(需要迭代器的容器操作)
使用迭代器间隔地删除表中的项
函数模板,可以用于list和vector
const_iterator
STL中,每一个集合不仅包含嵌套的iterator类型,也包含嵌套的const_iterator类型。iterator和const_iterator类型。iterator和const_iterator之间的主要区别是:const_iterator的operator*返回常量引用,这样const_iterator的*itr就不能出现在赋值语句的左边。
编译器会要求必须使用const_iterator类遍历常量集合。有两个版本的begin和两个版本的end来实现遍历集合: