c++ - begin() 和rend() 有什么区别?
问题描述
我在迭代器中有一个关于 和 之间区别的begin()
问题rend()
。
#include <iostream>
#include <array>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v1;
v1 = {9,2,6,4,5};
cout<<*v1.begin();
cout<<*v1.rend();
return 0;
}
cout<<*v1.begin();
返回 9
但
cout<<*v1.rend();
返回一个不是 9 的数字
为什么会有如此不同的结果?
解决方案
在 C++ 中,范围由一对迭代器标记,该迭代器标记范围的开始和超出范围结束的一个位置。对于容器,begin()
andend()
成员函数为您提供了一对指向第一个位置和最后一个位置的迭代器。从 中读取是不安全的end()
,因为它不指向实际元素。
类似地,成员函数rbegin()
和rend()
成员函数返回反向迭代器,它们分别指向最后一个位置和前一个位置。出于同样的原因,取消引用迭代器是不安全的end()
(它超过了范围的末尾),您不应该取消引用rend()
迭代器,因为它不指向容器内的元素。
推荐阅读
- html - html 中没有正确尊重宽度样式属性?
- c# - 每次显示表单时如何执行代码?
- python - 如何将不同的参数传递给使用各自的 sqlalchemy orm 类更新不同表的函数?
- wpf - 如何在 WPF 中的 ListBox 边框上绘制 ListBoxItem 边框?
- wordpress - WooCommerce - 2(二)个类别中的 1(一)个产品,价格不同
- django - 有没有办法在夹层/django RichTextPage 模型中注入特色图像字段?
- java - 将我的网站转移到其他主机后,我的 .jar 出现错误 503
- ios - 在没有视觉错误的下一个 ViewController 上设置 NavigationBar 标题
- html - UiPath 与 Linkedin 集成 - Html 字符不保留格式
- r - 用于跨列循环并保存到变量中