机试,vector迭代器
在C++里,std::vector
迭代器是一种强大的工具,用于遍历和操作 std::vector
容器中的元素。以下详细介绍 std::vector
迭代器的相关知识:
1. 迭代器的基本概念
迭代器是一种对象,它提供了一种统一的方式来访问容器中的元素,而无需关心容器的具体实现细节。对于 std::vector
来说,迭代器就像是一个指向元素的指针,允许你按顺序访问 vector
里的每个元素。
2. 迭代器的类型
- 正向迭代器:可以从
vector
的起始位置向末尾方向遍历元素。 - 反向迭代器:可以从
vector
的末尾位置向起始方向遍历元素。
3. 获取迭代器
begin()
:返回指向vector
第一个元素的迭代器。end()
:返回指向vector
最后一个元素之后位置的迭代器,通常用于判断是否遍历结束。rbegin()
:返回指向vector
最后一个元素的反向迭代器。rend()
:返回指向vector
第一个元素之前位置的反向迭代器。
4. 正向迭代器的使用示例
#include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; // 获取指向第一个元素的迭代器 std::vector<int>::iterator itBegin = vec.begin(); // 获取指向最后一个元素之后位置的迭代器 std::vector<int>::iterator itEnd = vec.end(); // 使用迭代器遍历 vector for (std::vector<int>::iterator it = itBegin; it != itEnd; ++it) { std::cout << *it << " "; } std::cout << std::endl; // C++11 及以后可以使用 auto 关键字简化迭代器类型 for (auto it = vec.begin(); it != vec.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; return 0; }
代码解释:
std::vector<int>::iterator
定义了一个vector<int>
类型的正向迭代器。vec.begin()
返回指向vector
第一个元素的迭代器,vec.end()
返回指向vector
最后一个元素之后位置的迭代器。- 通过
*it
可以访问迭代器所指向的元素。 ++it
使迭代器指向下一个元素。
5. 反向迭代器的使用示例
#include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; // 获取指向最后一个元素的反向迭代器 std::vector<int>::reverse_iterator ritBegin = vec.rbegin(); // 获取指向第一个元素之前位置的反向迭代器 std::vector<int>::reverse_iterator ritEnd = vec.rend(); // 使用反向迭代器遍历 vector for (std::vector<int>::reverse_iterator rit = ritBegin; rit != ritEnd; ++rit) { std::cout << *rit << " "; } std::cout << std::endl; // 使用 auto 关键字简化迭代器类型 for (auto rit = vec.rbegin(); rit != vec.rend(); ++rit) { std::cout << *rit << " "; } std::cout << std::endl; return 0; }
代码解释:
std::vector<int>::reverse_iterator
定义了一个vector<int>
类型的反向迭代器。vec.rbegin()
返回指向vector
最后一个元素的反向迭代器,vec.rend()
返回指向vector
第一个元素之前位置的反向迭代器。- 反向迭代器使用
++
操作符时,实际上是向vector
的起始方向移动。
6. 迭代器的其他操作
- 解引用操作符
*
:用于访问迭代器所指向的元素。 - 递增操作符
++
:使迭代器指向下一个元素(正向迭代器)或前一个元素(反向迭代器)。 - 比较操作符
==
和!=
:用于判断两个迭代器是否相等或不相等,通常用于循环条件判断。 - 算术操作符(仅随机访问迭代器):
std::vector
的迭代器是随机访问迭代器,可以使用+
、-
、+=
、-=
等算术操作符,例如it + 2
可以让迭代器向前移动两个位置。
7. 迭代器失效问题
在使用迭代器时需要注意迭代器失效的问题。当对 vector
进行插入或删除操作时,可能会导致迭代器失效。例如,在插入元素时,如果 vector
的容量发生改变,原来的迭代器就会失效。因此,在进行插入或删除操作后,需要重新获取有效的迭代器。
#include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3}; auto it = vec.begin(); // 插入元素,可能导致迭代器失效 vec.insert(it, 0); // 重新获取迭代器 it = vec.begin(); for (; it != vec.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; return 0; }
通过合理使用迭代器,可以方便地对 std::vector
中的元素进行遍历、访问和修改等操作。
考研机试常用的数据结构 文章被收录于专栏
考研机试常用的数据结构