簡體   English   中英

vector :: begin()和std :: begin()之間的區別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM