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,等,如果有这些之间的任何功能上的区别是什么我不知道是什么?如果没有,是否有一些历史原因让他们两个?
(如果这是重复的道歉,我已经搜索了全部,并且发现了这些方法中的一个或另一个的大量来源,但没有提到两者或比较两者.)
有一个历史原因:在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::crbegin和std::crend,具有类似的行为.