`
mywebcode
  • 浏览: 993514 次
文章分类
社区版块
存档分类
最新评论

STL 总结

 
阅读更多

目录


STL 的主要组成部分是:容器,迭代器和算法

STL容器是类

迭代器用来遍历容器中的每个元素

算法用来操作容器中的元素

容器的主要种类有顺序容器、关联容器和容器适配器

三种预定义的顺序容器是向量,队列和表

向量容器使用动态数组存储和管理数据

由于数组是一种随机访问的数据结构,所以向量中的元素可以随机访问

实现向量容器的类是vector

在向量容器中插入元素使用的操作是insert和push_back

从向量容器中删除元素的操作是pop_back,erase,clear

可以使用typedef iterator 声明一个向量容器的迭代器,其为vector 类的public 成员

在所有容器上都有的成员函数是默认构造函数,带参构造函数,拷贝构造函数,析构函数,empty,size,max_size,swap,begin,end,rbegin,rend,insert,erase,clear和关系运算函数

函数begin返回一个指向容器中第一个元素的迭代器

函数end 返回一个指向容器中最后一个元素的迭代器

除了容器所具有公共函数外,顺序容器还具有的成员函数是:insert,push_back,pop_back,erase,clear,resize

算法copy用来将指定区间中的元素拷贝到另外一个区间上

如果在函数copy中使用ostream迭代器,可以输出容器中的元素

创建了一个ostream迭代器,也即指定了该迭代器输出的元素类型

双端队列容器使用动态数组实现,可以在该动态数组的两端插入元素

双端队列的两端都可以扩展

实现双端队列的类是deque

双端队列的特有操作:assign,push_front,pop_front,at,数组下标运算符[],front,back

表容器使用双向链表实现。因此,表中的每个元素(第一个元素和最后一个元素外)都含有指向器直接前驱和直接后继的指针

实现表的类是list

表的特有操作:assign,push_front,pop_front,front,back,remove,remove_if,unique,splice,sort,merge,reverse

5种迭代器:输入迭代器,输出迭代器,前向迭代器,双向迭代器,随机访问迭代器

输入迭代器用来冲一个输入流输入数据

输出迭代器用来把数据输出到一个输出流

前向迭代器可以引用同一集合中的同一元素,并且可以处理同一元素多次

双向迭代器即是前向迭代器,有可以向后遍历元素

双向迭代器可以在list,set,multiset,map,multimap类型的容器上使用

随机访问迭代器是可以随机访问容器中元素的双向迭代器

随机访问迭代器可以在 vector,dequeue,string和数组类型的容器上使用

关联容器中的元素自动按照某种排序准测存储。默认的排序准测是 小于(<)

在STL中预定义的关联容器是set,multiset,map,multimap

set类型的容器不允许有重复元素

multiset允许有重复元素

定义集合容器的类是set

定义多重集合容器的类是multiset

包含集合类和多重集合类第一及操作的头文件时set

操作insert,erase,clear可以用来在集合中插入和删除元素

大多数类属算法包含在algorithm中

STL中算法主要有4类: 非修改型,修改型,数字型,堆

非修改算法,不修改容器中的元素

修改算法通过重新排列,删除以及改变元素的值来修改容器中的元素

只改变元素的顺序,而不改变元素的值的修改算法,称为变异算法

数字算法用来对容器中元素执行数字计算

函数对象是一种类模板,它重载了函数调用运算符operator()

预定义的算术函数对象是plus,minus,multiplies,divides,modulus和negate

预定义的关系函数对象是equal_to,not_equal_to,greater,greater_equal,less,less_equal

预定义的逻辑函数对象是logical_not,logical_and,logical_or

谓词是特殊类型的函数对象,他返回布尔类型的值

一元谓词在单个参数上检查某种特性;二元谓词在两个参数上检查某种特性

谓词通常用来指定查找或排序准测

在STL中,谓词总是为相同的值返回相同的结果

修改内部状态的函数不是谓词

STL提供了三种插入迭代器:back_inserter,front_inserter,inserter用来在目标中插入元素

back_inserter使用容器的push_back 操作替换赋值运算符

front_inserter使用容器的push_front操作替换赋值运算符

由于向量类不支持push_front操作,所以上面迭代器不能用于向量容器

inserter迭代器使用容器的 insert操作代替赋值运算符


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics