Zauważyłem istnieją 2 sposoby, aby uzyskać iteracyjnej końcowy wektora (lub inną klasę zbiornika):Różnica między std :: końca (myvector) i myVector.end()
std::end(myVector)
i
myVector.end()
To samo dotyczy wielu innych funkcji pojemnik iterator, begin
, cend
, cbegin
, rend
, rbegin
, crend
, crbegin
, find
itp co mam zastanawiasz się, czy jest jakaś różnica funkcjonalna między nimi? A jeśli nie, czy istnieje jakiś historyczny powód, aby mieć obie z nich?
(Przepraszam, jeśli jest to duplikat, rozglądałem się wszędzie, a znaleźć wiele źródeł dla jednego lub drugiego z tych sposobów, ale żaden nie wspomina zarówno lub porównuje dwa).
Jedyna różnica polega na tym, że nowa metoda działa również na tablicach? W porządku. Przydatne, myślę - być może będę musiał zapytać osobę, która napisała ten kod, dlaczego używamy go na 'wektorach 'i po prostu czyni niepotrzebnie bardziej gadatliwy kod, ale myślę, że to odpowiada na moje pytanie. –
@DarrelHoffman Sądzę, że to kwestia wyboru, ale wolę używać funkcji, które nie są członkami, jeśli to możliwe. BTW, jeśli parametr jest standardowym kontenerem biblioteki, 'std ::' można pominąć, a 'begin (v)' nie jest dużo bardziej gadatliwy niż 'v.begin()'. – juanchopanza
Tak, choć potencjalnie niebezpieczne w tym przypadku - znaczna część naszego kodu jest współdzielona przez wiele zespołów w różnych częściach świata, z których część nadal działa w C++ 0x ze względu na starsze wersje. Nie spodziewam się, aby ta konkretna część kodu powodowała problemy, ale w przeszłości były konflikty. (Musimy zaznaczyć pewne klasy jako "No C++ 11 allowed", aby nie łamały się kompilacje innych zespołów ...) –