Разница между vector :: begin() и std :: begin()
В то время как итерация вектора в 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';
против:
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';
Ответы
Ответ 1
std::begin()
был добавлен в С++ 11, чтобы упростить создание общего кода (например, в шаблонах). Самой очевидной причиной этого является то, что простые C- .begin()
массивы не имеют методов, поэтому нет .begin()
. Таким образом, вы можете использовать std::begin()
с массивами C-стиля, а также контейнеры в стиле STL, имеющие свои собственные begin()
и end()
.
Если вы пишете код, который не является шаблоном, вы можете игнорировать std::begin()
; ваши коллеги-программисты, вероятно, посчитают это странным, если вы вдруг начнете использовать его повсюду только потому, что он новый.
Ответ 2
Реализация 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 ...
}