在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';
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';
答案 0 :(得分:20)
std::begin()
,以便更容易编写通用代码(例如在模板中)。最明显的原因是普通的C风格数组没有方法,因此没有.begin()
。因此,您可以将std::begin()
与C风格的数组一起使用,也可以将STL风格的容器与begin()
和end()
一起使用。
如果您正在编写非模板的代码,则可以忽略std::begin()
;你的同事们可能会觉得奇怪,如果你突然开始在任何地方使用它只是因为它是新的。
答案 1 :(得分:1)
对于向量的std::begin()
的实现只是调用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 ...
}