std :: end(myVector)和myVector.end()

时间:2016-03-08 21:15:14

标签: c++ stl iterator containers

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

std::end(myVector)

myVector.end()

对于其他各种容器迭代器函数,begincendcbeginrendrbegincrend,{ {1}},crbegin等。我想知道的是这些之间是否有任何功能差异?如果没有,是否有一些历史原因可以同时拥有它们?

(道歉,如果这是一个副本,我已经搜遍了所有,并找到了这些方法中的一个或另一个的大量来源,但没有提到两者或比较两者。)

1 个答案:

答案 0 :(得分:7)

有一个历史原因:在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,行为相似。