C++ STL標準庫提供了許多迭代器,用來遍歷容器中的元素。迭代器在許多算法中都扮演著重要的角色,是一種非常強大和靈活的工具。迭代器在底層實現(xiàn)上類似于指針,可以通過解引用(*),自增(++)、自減(--)等操作訪問和定位容器中的元素。
常見的迭代器類型包括:
- 輸入迭代器(Input Iterator):允許在容器中前進,但不允許改變元素的值。例如,istream_iterator可以用于從標準輸入流中讀取值。
- 輸出迭代器(Output Iterator):允許往容器中寫入值,但不允許讀取元素的值。例如,ostream_iterator可以用于將值寫入到標準輸出流中。
- 前向迭代器(Forward Iterator):允許在容器中前進,也允許改變元素的值。例如,list和forward_list中的迭代器就是前向迭代器。
- 雙向迭代器(Bidirectional Iterator):提供了前向迭代器的功能,還增加了后退迭代器的能力,即自減操作(--)。例如,deque中的迭代器就是雙向迭代器。
- 隨機訪問迭代器(Random Access Iterator):提供了雙向迭代器的功能,還增加了通過偏移量訪問元素的能力。例如,vector中的迭代器就是隨機訪問迭代器。
迭代器的使用示例:
```cpp
#include iostream
#include vector
#include algorithm
using namespace std;
int main() {
vector v{5, 3, 2, 4, 1};
// 使用迭代器輸出容器中的所有元素
for (auto it = v.begin(); it != v.end(); ++it) {
cout << *it << " ";
}
cout << endl;
// 使用更簡潔的range-based for循環(huán)輸出
for (int x : v) {
cout << x << " ";
}
cout << endl;
// 使用迭代器查找元素
auto it = find(v.begin(), v.end(), 3);
if (it != v.end()) {
cout << "找到了元素3在第" << distance(v.begin(), it) << "個位置" << endl;
} else {
cout << "未找到元素3" << endl;
}
// 使用迭代器刪除元素
auto it2 = v.begin();
while (it2 != v.end()) {
if (*it2 == 2) {
it2 = v.erase(it2);
} else {
++it2;
}
}
// 使用迭代器修改元素
for (auto& x : v) {
x += 10;
}
// 使用迭代器排序容器中的元素
sort(v.begin(), v.end());
// 再次使用range-based for循環(huán)輸出
for (int x : v) {
cout << x << " ";
}
cout << endl;
return 0;
}
```
輸出:
```
5 3 2 4 1
5 3 2 4 1
找到了元素3在第1個位置
5 13 14 15
```
本示例展示了迭代器的基本用法,包括遍歷和操作容器中的元素、查找和刪除元素、修改元素和對元素排序等。需要注意的是,刪除迭代器指向的元素后,迭代器會失效,需要重新獲取迭代器來繼續(xù)遍歷操作。
標簽: