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

Dar*_*man 6 c++ containers iterator stl

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

std::end(myVector)
Run Code Online (Sandbox Code Playgroud)

myVector.end()
Run Code Online (Sandbox Code Playgroud)

这同样适用于其他各种容器迭代器功能begin,cend,cbegin,rend,rbegin,crend,crbegin,find,等,如果有这些之间的任何功能上的区别是什么我不知道是什么?如果没有,是否有一些历史原因让他们两个?

(如果这是重复的道歉,我已经搜索了全部,并且发现了这些方法中的一个或另一个的大量来源,但没有提到两者或比较两者.)

jua*_*nza 7

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

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

当应用于标准库的容器的效果,std::begin并且std::end是调用容器的begin()end()成员函数,所以没有功能上的差异.

C++ 14加入std::cbegin,std::cend,std::rbegin,std::rend,std::crbeginstd::crend,具有类似的行为.