欢迎光临散文网 会员登陆 & 注册

c++ STL 迭代器

2023-07-31 16:11 作者:Euler_Formula  | 我要投稿

C++ STL标准库提供了许多迭代器,用来遍历容器中的元素。迭代器在许多算法中都扮演着重要的角色,是一种非常强大和灵活的工具。迭代器在底层实现上类似于指针,可以通过解引用(*),自增(++)、自减(--)等操作访问和定位容器中的元素。 常见的迭代器类型包括: - 输入迭代器(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循环输出 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循环输出 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 ``` 本示例展示了迭代器的基本用法,包括遍历和操作容器中的元素、查找和删除元素、修改元素和对元素排序等。需要注意的是,删除迭代器指向的元素后,迭代器会失效,需要重新获取迭代器来继续遍历操作。

c++ STL 迭代器的评论 (共 条)

分享到微博请遵守国家法律