首页 > 解决方案 > 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++vectorstliterator

解决方案


在 C++ 中,范围由一对迭代器标记,该迭代器标记范围的开始和超出范围结束的一个位置。对于容器,begin()andend()成员函数为您提供了一对指向第一个位置和最后一个位置的迭代器。从 中读取是不安全的end(),因为它不指向实际元素。

类似地,成员函数rbegin()rend()成员函数返回反向迭代器,它们分别指向最后一个位置和前一个位置。出于同样的原因,取消引用迭代器是不安全的end()(它超过了范围的末尾),您不应该取消引用rend()迭代器,因为它不指向容器内的元素。


推荐阅读