std::end(myVector) 和 myVector.end() 之间的区别

Difference between std::end(myVector) and myVector.end()

本文关键字:myVector end 区别 std 之间      更新时间:2023-10-16

我注意到有两种方法可以获取向量(或其他容器类)的结束迭代器:

std::end(myVector)

myVector.end()

其他各种容器迭代器函数也是如此,begincendcbeginrendrbegincrendcrbeginfind等。 我想知道的是这些之间是否有任何功能差异? 如果没有,是否有一些历史原因同时拥有它们?

(很抱歉,如果这是重复的,我已经搜索了所有方法,并找到了其中一种或另一种方法的大量来源,但没有一个提到两者或比较两者。

有一个历史原因:在 C++11 之前,只有成员函数版本存在。C++11 添加了非成员,它们也适用于普通的 C 样式数组,因此可以认为更通用。

int a[] = {3, 1, 5, 67, 28, -12};
std::sort(std::begin(a), std::end(a));

当应用于标准库容器时,std::beginstd::end的作用是调用容器的begin()end()成员函数,因此没有功能差异。

C++14增加了std::cbeginstd::cendstd::rbeginstd::rendstd::crbeginstd::crend,具有类似的行为。

相关文章: