在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(); 如果你突然开始使用它只是因为它是新的,你的同事程序员可能会觉得奇怪.
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)