在C++中,遍历STL(Standard Template Library)容器通常可以通过多种方法来完成。以下是几种常用的遍历STL容器的方法:
1. 使用迭代器(Iterator)
迭代器是STL中用于遍历容器的主要工具。它们提供了一种通用方法来访问容器中的元素,无论容器是什么类型。
cpp复制代码
#include <iostream> | |
#include <vector> | |
int main() { | |
std::vector<int> v = {1, 2, 3, 4, 5}; | |
// 使用正向迭代器遍历容器 | |
for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) { | |
std::cout << *it << ' '; | |
} | |
std::cout << '\n'; | |
// 对于const容器,使用const_iterator | |
for (std::vector<int>::const_iterator it = v.cbegin(); it != v.cend(); ++it) { | |
std::cout << *it << ' '; | |
} | |
std::cout << '\n'; | |
// C++11开始支持基于范围的for循环(range-based for loop) | |
for (auto& elem : v) { | |
std::cout << elem << ' '; | |
} | |
std::cout << '\n'; | |
return 0; | |
} |
2. 使用基于范围的for循环(C++11及更高版本)
基于范围的for循环(也称为范围for循环)是C++11引入的一种更简洁的遍历容器的方法。它隐式地处理了迭代器的创建和更新。
cpp复制代码
for (auto& elem : v) { | |
// 在这里处理elem,它是v中的一个元素的引用 | |
std::cout << elem << ' '; | |
} |
3. 使用反向迭代器(Reverse Iterator)
如果你需要反向遍历容器(从后往前遍历),可以使用反向迭代器。
cpp复制代码
for (std::vector<int>::reverse_iterator rit = v.rbegin(); rit != v.rend(); ++rit) { | |
std::cout << *rit << ' '; | |
} | |
std::cout << '\n'; |
4. 使用STL算法
虽然不常见,但你也可以使用STL中的算法来遍历容器。例如,std::for_each
算法可以对容器中的每个元素执行一个函数。
cpp复制代码
#include <algorithm> | |
std::for_each(v.begin(), v.end(), [](int elem) { std::cout << elem << ' '; }); | |
std::cout << '\n'; |
注意事项:
- 当你遍历容器并可能修改容器的大小时(例如,在遍历过程中添加或删除元素),需要特别小心。这可能会导致迭代器失效或产生未定义的行为。
- 对于关联容器(如
std::map
和std::unordered_map
),你还可以使用成员函数如begin()
,end()
,cbegin()
,cend()
,rbegin()
,rend()
,find()
,lower_bound()
,upper_bound()
等来获取迭代器并遍历容器。