c++ - begin() 和 rend() 有什么区别?

标签 c++ vector stl iterator

我在迭代器中有一个关于 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()end() 成员函数为您提供了一对指向首尾位置的迭代器。从 end() 读取是不安全的,因为它不指向实际元素。

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

关于c++ - begin() 和 rend() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56612556/

相关文章:

c++ - 如果我没有头文件,如何使用静态库中的函数

c++ - 几天后 DIR 函数返回 false

java - 同一个对象的两个不同的同步方法?

c++ - 在一组中保存一堆 const char* 的最简单、最安全的方法?

c++ - 一行 std::vector ctor 映射另一个 vector ?

c++ - 主库和共享库之间的全局名称不可见

c++ - 如何找到内存泄漏的位置?

vector - 在 Rust 中连接向量的最佳方法是什么?

c++ - 将额外参数传递给 libcurl CURLOPT_READFUNCTION 回调

c++ - remove_if 的一元谓词可以有副作用吗?