容器部分:
顺序容器:vector deque list -- 通过元素在容器中的位置顺序存储和访问元素
vector:支持快速随机访问---容器适配器为stack后进先出栈
deque:双端队列---容器适配器为priority_queue有优先级管理的队列
list:支持快速插入/删除---容器适配器为queue先进先出队列
关联容器:map set -- 关联容器通过键(key)存储和读取元素
pair类型--#include<utility>--pair<T1,T2> p1;
map:以键-值(key-value)对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据--关联数组,元素通过键来存储和读取
map<K,V>::value_type:一个pair类型,它的first元素具有const map<K,V>::key_type类型,而second元素则为map<K,V>::mapped_type类型--map迭代器进行解引用将产生pair类型的对象
set:仅包含一个键,并有效地支持关于某个键是否存在的查询--大小可变的集合,支持通过键实现的快速读取
顺序容器:vector deque list -- 通过元素在容器中的位置顺序存储和访问元素
vector:支持快速随机访问---容器适配器为stack后进先出栈
deque:双端队列---容器适配器为priority_queue有优先级管理的队列
list:支持快速插入/删除---容器适配器为queue先进先出队列
关联容器:map set -- 关联容器通过键(key)存储和读取元素
pair类型--#include<utility>--pair<T1,T2> p1;
map:以键-值(key-value)对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据--关联数组,元素通过键来存储和读取
map<K,V>::value_type:一个pair类型,它的first元素具有const map<K,V>::key_type类型,而second元素则为map<K,V>::mapped_type类型--map迭代器进行解引用将产生pair类型的对象
set:仅包含一个键,并有效地支持关于某个键是否存在的查询--大小可变的集合,支持通过键实现的快速读取
泛型算法:
实现了共同的操作,所以称之为“算法”;而“泛型”指的是它们可以操作在多种容器类型上;泛型算法本身从不执行容器操作,只是单独依赖迭代器和迭代器操作实现。
1.#include<algorithm> / 2.#include<numeric>
1.find()查找操作,三个形参,一对迭代器,一个要查找的值--返回第一次查找到该值的迭代器
2.accumulate()累加操作,三个形参,一对迭代器,一个累加的初值并给出返回的类型--返回累加的值
1.fill()赋值操作,三个形参,一对迭代器,一个所要赋值的值
1.fill_n()赋值操作,一个迭代器,一个计数器,一个值
1.back_inserter()插入迭代器,可以给基础容器添加元素的迭代器#include<iterator>
1.copy()复制操作,三个参数,一对迭代器,一个存储复制元素的容器
1.replace()替换操作,四个参数,一对迭代器,两个值
1.replace_copy()不改变原序列的替换操作,五个参数,一对迭代器,一个容器,两个值
1.sort()字典排序操作,两个形参,一对迭代器
1.unique()删除相邻的重复元素,并返回一个迭代器,表示无重复的值范围的结束
1.erase()删除操作,两个形参,一对迭代器
谓词(predicate):做某些检测的还书,返回用于条件判断的类型,指出条件是否成立。
1.stable_sort()按长度大小排序,而长度相同的单词仍保持字典顺序,三个参数,一对迭代器,一个谓词--比较长度大小的
1.count_if()统计符合谓词的操作,三个形参,一对迭代器,一个谓词
实现了共同的操作,所以称之为“算法”;而“泛型”指的是它们可以操作在多种容器类型上;泛型算法本身从不执行容器操作,只是单独依赖迭代器和迭代器操作实现。
1.#include<algorithm> / 2.#include<numeric>
1.find()查找操作,三个形参,一对迭代器,一个要查找的值--返回第一次查找到该值的迭代器
2.accumulate()累加操作,三个形参,一对迭代器,一个累加的初值并给出返回的类型--返回累加的值
1.fill()赋值操作,三个形参,一对迭代器,一个所要赋值的值
1.fill_n()赋值操作,一个迭代器,一个计数器,一个值
1.back_inserter()插入迭代器,可以给基础容器添加元素的迭代器#include<iterator>
1.copy()复制操作,三个参数,一对迭代器,一个存储复制元素的容器
1.replace()替换操作,四个参数,一对迭代器,两个值
1.replace_copy()不改变原序列的替换操作,五个参数,一对迭代器,一个容器,两个值
1.sort()字典排序操作,两个形参,一对迭代器
1.unique()删除相邻的重复元素,并返回一个迭代器,表示无重复的值范围的结束
1.erase()删除操作,两个形参,一对迭代器
谓词(predicate):做某些检测的还书,返回用于条件判断的类型,指出条件是否成立。
1.stable_sort()按长度大小排序,而长度相同的单词仍保持字典顺序,三个参数,一对迭代器,一个谓词--比较长度大小的
1.count_if()统计符合谓词的操作,三个形参,一对迭代器,一个谓词
迭代器:#include<iterator>
(1)插入迭代器(insert iterator)--与容器绑定在一起,实现在容器中插入元素的功能
back_inserter:创建使用push_back实现插入的迭代器
front_inserter:创建使用push_front实现插入的迭代器
inserter:随意插入,需要指定插入位置,总是在它的迭代器实参所标明的位置前面插入新元素
(2)isotream迭代器(iostream iterator)--与输入或输出流绑定在一起,用于迭代遍历所关联的IO流
istream_iterator<T> in(strm) 创建从输入流strm中读取T类型对象的istream_iterator对象
istream_iterator<T> in 创建超出末端迭代器的istream_iterator对象
ostream_iterator<T> in(strm) 创建将T类型的对象写到输出流strm的ostream_iterator对象
ostream_iterator<T> in(strm, delim) 同上,在写入过程中使用delim作为元素的分隔符
流迭代器都是类模板:任何已定义输入操作符(>>操作符)的类型都可以定义istream_iterator,输出同理。
注:ostream_iterator对象必须与特定的流绑定在一起
(3)反向迭代器(reverse iterator)--向后遍历rbegin和rend
例:降序排列vector,对sort传递一对反向迭代器:sort(vec.rbegin, vec.rend)
(1)插入迭代器(insert iterator)--与容器绑定在一起,实现在容器中插入元素的功能
back_inserter:创建使用push_back实现插入的迭代器
front_inserter:创建使用push_front实现插入的迭代器
inserter:随意插入,需要指定插入位置,总是在它的迭代器实参所标明的位置前面插入新元素
(2)isotream迭代器(iostream iterator)--与输入或输出流绑定在一起,用于迭代遍历所关联的IO流
istream_iterator<T> in(strm) 创建从输入流strm中读取T类型对象的istream_iterator对象
istream_iterator<T> in 创建超出末端迭代器的istream_iterator对象
ostream_iterator<T> in(strm) 创建将T类型的对象写到输出流strm的ostream_iterator对象
ostream_iterator<T> in(strm, delim) 同上,在写入过程中使用delim作为元素的分隔符
流迭代器都是类模板:任何已定义输入操作符(>>操作符)的类型都可以定义istream_iterator,输出同理。
注:ostream_iterator对象必须与特定的流绑定在一起
(3)反向迭代器(reverse iterator)--向后遍历rbegin和rend
例:降序排列vector,对sort传递一对反向迭代器:sort(vec.rbegin, vec.rend)
(4)const_iterator(不需要iterator头文件):这样定义是不希望使用这个迭代器来修改容器中的元素
容器特有的算法:
list容器
list容器