STL常用算法
常用容器迭代器
容器 | 迭代器类型 |
---|---|
vector | 随机存取迭代器 |
deque | 分段连续,是一种假的连续,随机存取迭代器 |
list | 双向迭代器 |
string | 随机存取迭代器 |
set | 双向迭代器,元素为常量 |
multiset | 双向迭代器,元素为常量 |
map | 双向迭代器,key 值为常量 |
multimap | 双向迭代器,key 值为常量 |
array | 随机存取迭代器 |
forward_list | 单向迭代器 |
unordered_set | 单向迭代器 |
unordered_map | 单向迭代器 |
unordered_multiset | 单向迭代器 |
unordered_multimap | 单向迭代器 |
-
输入迭代器:只能读不能写,只支持
++
自增运算,如istream_iterator
-
输出迭代器:只能写不能读,支持
++
,如ostream_iterator
-
前向迭代器:提供读写操作,支持
++
-
const
迭代器:每种容器都有const_iterator
,只能读 -
随机存取迭代器:可读可写,并且可随机
+n
-
双向迭代器:支持
++
自增,也支持--
自减
算法
STL
算法都是对迭代器进行操作,beg
为开始位置,end
为结束位置+1,dest
表目的位置
一般算法都会提供两个版本,有个版本可以传入谓词来决定算法的策略
// 版本1
template<typename Iterator>
Algorithm(Iterator itr1, Iterator itr2)
{
……
}
// 版本2
template<typename Iterator, typename Cmp>
Algorithm(Iterator itr1, Iterator itr2, Cmp comp)
{
……
}
查找算法
用于在一个序列中搜索一个指定值或一个指定值的序列
并且都提供了两个重载的版本,第一个版本使用底层类型的相等运算符(==)来比较,第二个版本使用用户给定的一元谓词或二元谓词来比较
// 要求输入迭代器
find(beg, end, val); // 返回一个迭代器,指向第一个等于val的元素
find_if(beg, end, unaryPred); // unaryPred 为一元谓词
find_if_not(beg, end, unaryPred);
count(beg, end, val); // 返回一个计数器,val出现的次数
count_if(beg, end, unaryPred);
查找重复值
输入迭代器算法
copy(beg, end, dest);
未完待续。。。