C++ STL set容器迭代器用法详解
值得一提的是,C++ STL 标准库为 set 容器配置的迭代器类型为双向迭代器。这意味着,假设 p 为此类型的迭代器,则其只能进行 ++p、p++、--p、p--、*p 操作,并且 2 个双向迭代器之间做比较,也只能使用 == 或者 != 运算符。
在 set 容器类模板提供的所有成员函数中,返回迭代器的成员函数如表 1 所示。
成员方法 | 功能 |
|---|---|
begin() | 返回指向容器中个(注意,是已排好序的个)元素的双向迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
end() | 返回指向容器一个元素(注意,是已排好序的一个)所在位置后一个位置的双向迭代器,通常和 begin() 结使用。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
rbegin() | 返回指向一个(注意,是已排好序的一个)元素的反向双向迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器。 |
rend() | 返回指向个(注意,是已排好序的个)元素所在位置前一个位置的反向双向迭代器。通常和 rbegin() 结使用。如果 set 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器。 |
cbegin() | 和 begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的元素值。 |
cend() | 和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的元素值。 |
crbegin() | 和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的元素值。 |
crend() | 和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的元素值。 |
find(val) | 在 set 容器中查找值为 val 的元素,如果成功找到,则返回指向该元素的双向迭代器;反之,则返回和 end() 方法一样的迭代器。另外,如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
lower_bound(val) | 返回一个指向当前 set 容器中个大于或等于 val 的元素的双向迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
upper_bound(val) | 返回一个指向当前 set 容器中个大于 val 的元素的迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
equal_range(val) | 该方法返回一个 pair 对象(包含 2 个双向迭代器),其中 pair.first 和 lower_bound() 方法的返回值等价,pair.second 和 upper_bound() 方法的返回值等价。也就是说,该方法将返回一个范围,该范围中包含的值为 val 的元素(set 容器中各个元素是的,因此该范围最多包含一个元素)。 |
注意,以上成员函数返回的迭代器,指向的只是 set 容器中存储的元素,而不再是键值对。另外,以上成员方法返回的迭代器,无论是 const 类型还是非 const 类型,都不能用于修改 set 容器中的值。
图 2 演示了表 1 中除 4 个成员函数外,其它几个成员函数的具体功能。

图 2 set容器迭代器功能示意图
其中,Ei 表示 set 容器中存储的各个元素,它们的值各不相同。
下面程序以 begin()/end() 为例,演示了如何使用图 2 中相关迭代器遍历 set 容器:
#include <iostream>
#include <set>
#include <string>
using namespace std;
int main()
{
//创建并初始化set容器
std::set<std::string> myset{ "http://c.biancheng网站站点" rel="nofollow" />
http://c.biancheng网站站点" rel="nofollow" /> #include <iostream>
#include <set>
#include <string>
using namespace std;
int main()
{
//创建并初始化set容器
std::set<std::string> myset{ "http://c.biancheng网站站点" rel="nofollow" />
http://c.biancheng网站站点" rel="nofollow" />
- 随机文章
- 烟台 长岛 东方马尔代夫(长岛——大自然的海洋乐园)
- 马尔代夫轮船(马尔代夫海域发生船只沉没事件,多人失踪)
- 马尔代夫鲨鱼潜点(马尔代夫著名潜点吸引游客亲近鲨鱼)
- 马尔代夫三大优势(探究马尔代夫三大卖点,打造完美假期 马尔代夫旅游三大优势)
- 南昌马尔代夫风景(南昌打造仿佛置身马尔代夫的旅游胜地)
- 马尔代夫荧光酒店(马尔代夫独特荧光酒店,美不胜收!)
- 北京 马尔代夫 班机(北京至马尔代夫航班新开, 候机须知这里!)
- 亚洲地图马尔代夫(美丽的印度洋岛国:马尔代夫地图解析)
- 国奥 马尔代夫(国奥赢得与马尔代夫的比赛)
- 国旗马尔代夫圆形(马尔代夫国旗:圆形的设计意义和象征)
- 广州惠州马尔代夫(广惠两地共揽马尔代夫客,供求双赢!)
- 微爱 马尔代夫(微爱马尔代夫:浪漫度假胜地)
- 杭州马尔代夫游玩(体验浪漫旅行!杭州马尔代夫游全攻略)
- 巴南 马尔代夫(后的:巴南青年赴马尔代夫游学)
- 明星 马尔代夫(明星探秘:揭秘马尔代夫奢华之旅)
- 清晨马尔代夫的画(清晨的马尔代夫:一个美不胜收的画。)
- 此生必去马尔代夫(探秘马尔代夫:体验此生必去的天堂!)
- 安徽 马尔代夫(安徽旅行社推马尔代夫五晚六日自由行!)
- 广州马尔代夫海岛(广州人的新旅游胜地:马尔代夫海岛!)
- 锦州马尔代夫潜水(锦州游客在仙人掌岛畅游美妙海底世界)
- 钦州 马尔代夫(钦州直飞马尔代夫,梦幻海岛游等你来!)
- 韩国马尔代夫旅游(韩媒:韩国游客前往马尔代夫旅游激增)
- 国内 马尔代夫(马尔代夫游客免隔离!燃爆国内旅游市场)
- 马尔代夫香茅味道(标题:感受马尔代夫的香茅芳香气息)
- 宜昌郊外马尔代夫(宜昌风景如画,郊外仿若身处马尔代夫)
- 马尔代夫与北阿里(马尔代夫与北阿里岛达成重要合作协议)
- 钓鱼 马尔代夫(警惕!马尔代夫钓鱼骗局,提防上当受骗!)
- 马尔代夫中国全场(中国在马尔代夫全面开展援助合作计划)
- 马尔代夫别墅隔音(马尔代夫度假屋带隔音,环境清幽怡人)
- 马尔代夫到海豚湾(探秘马尔代夫海豚湾:海豚的海洋天堂)
