vector :: begin()和std :: begin()之间的区别

Sha*_*dow 19 c++ vector

在c ++中迭代一个向量时,我注意到begin()标准库中有一个函数,还有一个begin()作为类的成员函数vector.如果有的话,两者之间的区别是什么,哪一个应该用于另一个?

例:

vector<int> numbers;
//Code to put values in my vector
for (vector<int>::iterator i = numbers.begin(); i < numbers.end(); i++)
    cout << *i << '\n';
Run Code Online (Sandbox Code Playgroud)

VS:

vector<int> numbers;
//Code to put values in my vector
for (vector<int>::iterator i = std::begin(numbers); i < std::end(numbers); i++)
    cout << *i << '\n';
Run Code Online (Sandbox Code Playgroud)

Joh*_*nck 22

std::begin()在C++ 11中添加了更容易编写通用代码(例如在模板中).最明显的原因是普通的C风格数组没有方法,因此没有.begin().所以你可以使用std::begin()C风格的数组,以及拥有自己的begin()end().的STL风格的容器.

如果你编写的代码不是模板,你可以忽略std::begin(); 如果你突然开始使用它只是因为它是新的,你的同事程序员可能会觉得奇怪.

  • @JohnZwinck `begin(vec)` (感谢 ADL)比 `vec.begin()` 少打字:) (4认同)
  • 仅仅因为你想保持一致就使用它怎么样? (3认同)
  • 考虑到如果`std :: begin`可用,那么基于范围的循环和'auto`也是如此; 我宁愿根本看不到第二个版本! (3认同)

Tob*_*ght 6

std::begin()for 矢量的实现只需调用std::vector<T>::begin(),因此在这种情况下两者之间没有区别。

通用算法的独特之处std::begin()在于:

template<typename Container>
void my_algorithm(Container c) {
    using std::begin;
    using std::end;
    auto const start = begin(c);  // ADL will find the appropriate overload
    auto const finish = end(c);
    // ... rest of code ...
}
Run Code Online (Sandbox Code Playgroud)