c ++ 14 - vec.begin()和begin(vec)之间有什么区别吗

时间:2018-06-12 23:16:28

标签: c++ syntax c++11 iterator c++14

在这个问题(https://stackoverflow.com/questions/6926433/how-to-shuffle-a-stdvector)中,user703016使用以下语法访问矢量卡的迭代器_:

对于C ++ 98,他们建议使用:cards_.begin()和cards_.end()

对于C ++ 11,他们建议使用:std :: begin(cards_)和std :: end(cards _)

对于C ++ 14,哪种语法更可取,两者之间有什么真正的区别?在今天之前,我只看过第一种语法。

1 个答案:

答案 0 :(得分:5)

只要您处理vector,就没有任何区别。

然而,

std::begin()std::end()会在.begin().end()无法正常工作的某些情况下发挥作用。主要的是使用内置数组。例如,这将正常工作:

char foo[] = "17395";

std::sort(std::begin(foo), std::end(foo));

当然foo.begin()foo.end()可能无法正常工作,因为内置数组没有任何成员函数。