[英]Difference between vector::begin() and 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';
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';
在C ++ 11中添加了std::begin()
,以便更容易編寫通用代碼(例如在模板中)。 最明顯的原因是普通的C風格數組沒有方法,因此沒有.begin()
。 所以你可以使用帶有C風格數組的std::begin()
,以及擁有自己的begin()
和end()
STL風格容器。
如果您編寫的代碼不是模板,則可以忽略std::begin()
; 如果你突然開始使用它只是因為它是新的,你的同事程序員可能會覺得奇怪。
向量的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 ...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.