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);
未完待续。。。
本文介绍了STL中的常用迭代器类型,包括输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机存取迭代器,并详细讲解了如何使用这些迭代器。此外,还探讨了STL算法,特别是查找算法,包括基于相等运算符和谓词的查找,以及查找重复值的方法。这些算法通常通过对迭代器的操作来实现。
204

被折叠的 条评论
为什么被折叠?



