我注意到有两种方法可以获得向量(或其他容器类)的结束迭代器:
std::end(myVector)
和
myVector.end()
对于其他各种容器迭代器函数,begin
,cend
,cbegin
,rend
,rbegin
,crend
,{ {1}},crbegin
等。我想知道的是这些之间是否有任何功能差异?如果没有,是否有一些历史原因可以同时拥有它们?
(道歉,如果这是一个副本,我已经搜遍了所有,并找到了这些方法中的一个或另一个的大量来源,但没有提到两者或比较两者。)
答案 0 :(得分:7)
有一个历史原因:在C ++ 11之前,只存在成员函数版本。 C ++ 11添加了非成员,它也适用于普通的C风格数组,所以可以认为更通用。
int a[] = {3, 1, 5, 67, 28, -12};
std::sort(std::begin(a), std::end(a));
当应用于标准库容器时,std::begin
和std::end
的效果是调用容器的begin()
和end()
成员函数,因此没有功能差异。
C ++ 14添加了std::cbegin
,std::cend
,std::rbegin
,std::rend
,std::crbegin
和std::crend
,行为相似。