STL unordered_set迭代器

STL unordered_set迭代器教程

C++ STL 中的 unordered_set 容器类模板中未提供 at() 成员函数,也未对 [] 运算符进行重载。因此,要想访问 unordered_set 容器中存储的元素,只能借助 unordered_set 容器的迭代器。

STL unordered_set迭代器详解

成员方法 功能
begin() 返回指向容器中第一个元素的正向迭代器。
end() 返回指向容器中最后一个元素之后位置的正向迭代器。
cbegin() 和 begin() 功能相同,只不过其返回的是 const 类型的正向迭代器。
cend() 和 end() 功能相同,只不过其返回的是 const 类型的正向迭代器。
find(val) 查找以值为 key 的元素,如果找到,则返回一个指向该元素的正向迭代器;反之,则返回一个指向容器中最后一个元素之后位置的迭代器(如果 end() 方法返回的迭代器)。
equal_range(val) 返回一个 pair 对象,其包含 2 个迭代器,用于表明当前容器中值为 key 的元素所在的范围。

案例

unordered_set begin和end迭代器

使用 begin 和 end 迭代器访问元素

#include <iostream> #include <unordered_set> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; unordered_set<string> unordered_set1{"HaiCoder", "www.haicoder.net", "haicoder.net"}; for(auto iter = unordered_set1.begin(); iter != unordered_set1.end(); ++iter) { cout << *iter << endl; } return 0; }

因为,这里需要使用 C++ 11,因此,我们在 Linux 下使用 g++ 进行编译,具体命令如下:

g++ unordered_set.cpp -std=c++11

编译后,我们直接运行生成的二进制文件 a.out,如下图所示:

38_unordered_set迭代器.png

我们使用了 unordered_set 的迭代器,访问了 unordered_set 的所有元素。

unordered_set cbegin和cend迭代器

使用 cbegin 和 cend 迭代器访问元素

#include <iostream> #include <unordered_set> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; unordered_set<string> unordered_set1{"HaiCoder", "www.haicoder.net", "haicoder.net"}; for(auto iter = unordered_set1.cbegin(); iter != unordered_set1.cend(); ++iter) { cout << *iter << endl; } return 0; }

编译后,我们直接运行生成的二进制文件 a.out,如下图所示:

39_unordered_set迭代器.png

我们使用了 cbegin 和 cend 反向迭代器,遍历了 unordered_set 的所有元素。

STL unordered_set迭代器教程

C++ STL 中的 unordered_set 容器类模板中未提供 at() 成员函数,也未对 [] 运算符进行重载。因此,要想访问 unordered_set 容器中存储的元素,只能借助 unordered_set 容器的迭代器。