std::end(myVector) 和 myVector.end() 之间的区别
Difference between std::end(myVector) and myVector.end()
我注意到有两种方法可以获取向量(或其他容器class)的结束迭代器:
std::end(myVector)
和
myVector.end()
其他各种容器迭代器函数也是如此,begin
、cend
、cbegin
、rend
、rbegin
、crend
、crbegin
、find
等。我想知道它们之间是否存在任何功能差异?如果没有,是否有一些历史原因需要同时拥有它们?
(很抱歉,如果这是重复的,我已经进行了全面搜索,并找到了这些方法中的一种或另一种的大量资源,但是 none 提到了这两种方法或比较了两种方法。)
这是有历史原因的:在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
,具有类似的行为。
我注意到有两种方法可以获取向量(或其他容器class)的结束迭代器:
std::end(myVector)
和
myVector.end()
其他各种容器迭代器函数也是如此,begin
、cend
、cbegin
、rend
、rbegin
、crend
、crbegin
、find
等。我想知道它们之间是否存在任何功能差异?如果没有,是否有一些历史原因需要同时拥有它们?
(很抱歉,如果这是重复的,我已经进行了全面搜索,并找到了这些方法中的一种或另一种的大量资源,但是 none 提到了这两种方法或比较了两种方法。)
这是有历史原因的:在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
,具有类似的行为。