目录
前言
主要参考
vector::begin
vector::end
vector::rbegin
vector::rend
vector::cbegin等常量迭代器相关.
共勉
前言
本文将讨论STL容器vector中与迭代器相关的函数,模板参数T为int类型。
主要参考
cpluscplus.com
侯捷《STL源码剖析》
通义
vector::begin
iterator begin();
参数: 无
返回值: 返回指向序列容器的开始位置迭代器。iterator 类型的值
功能:
- 返回指向vector中第一个元素的迭代器。
- 请注意,与成员vector::front不同,该函数返回一个可访问随机访问迭代器。如果容器为空,则返回的迭代器值不得解引用。
案例:
#include <iostream> #include <vector> int main() { std::cout << std::endl; std::vector<int> ints{11, 12, 13, 14, 15, 16}; // 使用std::begin 获取 第一个元素 std::vector<int>::iterator a = ints.begin(); std::cout << *a << std::endl; // 使用std::begin 和 std::end 实现vector对象的遍历 for (std::vector<int>::iterator it = ints.begin(); it != ints.end(); it++) { std::cout << *it << ' '; } std::cout << std::endl; std::cout << std::endl; // 容器为空情况, 解引用begin迭代器, 会导致程序崩溃 // std::vector<int> test_err; // std::vector<int>::iterator test = test_err.begin(); // std::cout << *test << std::endl; return 0; }
运行结果
vector::end
iterator end();
参数: 无
返回值: 指向序列末尾之后的元素迭代器。iterator 类型的值
功能:
- 返回迭代器到末尾 返回指向vector容器中末尾元素的迭代器。
- 末尾元素是理论上的元素,它会跟随vector中的最后一个元素。它不指向任何元素,因此不应被解引用。
- 由于标准库函数使用的范围不包括由其闭合迭代器所指的元素,因此该功能通常与vector::begin一起使用以指定包含容器中所有元素的范围。
- 如果容器为空,则此函数将返回与vector::begin相同的结果。
案例:
#include <iostream> #include <vector> int main() { std::cout << std::endl; std::vector<int> ints{ 11, 12, 13, 14, 15, 16 }; // 使用std::begin 和 std::end 实现vector对象的遍历 // std::end 作为结束的标志 std::cout << "vector遍历的结果为: "; for (std::vector<int>::iterator it = ints.begin(); it != ints.end(); it++) { std::cout << *it << ' '; } std::cout << std::endl; std::cout << std::endl; 解引用std::end 会导致程序错误。 //std::vector<int>::iterator test = ints.end(); //std::cout << *test << std::endl; return 0; }
运行结果
vector::rbegin
reverse_iterator rbegin();
参数: 无
返回值: vector的逆向开始处的逆向迭代器, reverse_iterator 类型的值
功能:
- 返回指向vector中最后一个元素的反向迭代器(即,其反向开始)。
- 反向迭代器从后向前遍历:增加它们会将它们移动到容器的开头。
- rbegin指针指向成员end所指向的那个元素之前的一个元素。
案例:
#include <iostream> #include <vector> int main() { std::cout << std::endl; std::vector<int> ints{11, 12, 13, 14, 15, 16}; // 使用std::rbegin 和 std::rend 实现vector对象的逆序遍历 // std::end 作为结束的标志 std::cout << "vector遍历的结果为: "; for (std::vector<int>::reverse_iterator it = ints.rbegin(); it != ints.rend(); it++) { std::cout << *it << ' '; } std::cout << std::endl; std::cout << std::endl; return 0; }
运行结果
vector::rend
reverse_iterator rend();
参数: 无
返回值: vector的逆向结尾处的逆向迭代器.reverse_iterator 类型的值
功能:
- 返回反向迭代器到反向末尾
- 返回指向理论元素的反向迭代器,该元素在vector中的第一个元素之前(被认为是其反向末尾)。
案例:
#include <iostream> #include <vector> int main() { std::cout << std::endl; std::vector<int> ints{11, 12, 13, 14, 15, 16}; // 使用std::rbegin 和 std::rend 实现vector对象的逆序遍历 std::cout << "vector逆序遍历的结果为: "; for (std::vector<int>::reverse_iterator it = ints.rbegin(); it != ints.rend(); it++) { std::cout << *it << ' '; } std::cout << std::endl; std::cout << std::endl; return 0; }
运行结果
vector::cbegin等常量迭代器相关.
const_iterator cbegin();
参数: 无
返回值: vector起始位置的一个常量迭代器。const_iterator 类型的值
功能:
- 返回指向容器中第一个元素的const迭代器。
- const迭代器是一个指针到常量内容的迭代器。这个迭代器可以增加和减少(除非它本身也是常量),就像vector::begin返回的迭代器一样,但它不能用于修改所指向的内容,即使vector对象不是自身是常量。
- 如果容器为空,则返回的迭代器值不得解引用。
案例:
#include <iostream> #include <vector> int main() { std::cout << std::endl; std::vector<int> ints{11, 12, 13, 14, 15, 16}; // 使用std::rbegin 和 std::rend 实现vector对象的逆序遍历 std::cout << "vector逆序遍历的结果为: "; for (std::vector<int>::const_iterator it = ints.cbegin(); it != ints.cend(); it++) { // err常量数据无法修改。 // *it = 20; std::cout << *it << ' '; } std::cout << std::endl; std::cout << std::endl; return 0; }
vector::cend, vector::crbegin, vector::crend 都是上面讨论过的常量版本,在这里就不再赘述了。有什么问题可以私信或者评论区讨论。
共勉
希望本文能给你带来帮助,如果有什么问题或疑问欢迎评论区和私信讨论。谢谢点赞、收藏、关注。
感谢阅读