ich bemerkt habe gibt es 2 Möglichkeiten, um das Ende Iterator eines Vektors (oder eine andere Container-Klasse) zu erhalten:Unterschied zwischen std :: end (myVector) und myVector.end()
std::end(myVector)
und
myVector.end()
Das gleiche gilt für verschiedene andere Behälter Iterator Funktionen, begin
, cend
, cbegin
, rend
, rbegin
, crend
, crbegin
, find
usw. Was ich bin frage mich, ob es einen funktionalen Unterschied zwischen diesen gibt? Und wenn nicht, gibt es einen historischen Grund, beide zu haben?
(Entschuldigt, wenn dies ein Duplikat ist, habe ich überall gesucht, und viele Quellen für die eine oder andere dieser Methoden gefunden, aber keine, die die beiden beiden oder vergleicht erwähnt.)
So ist der einzige Unterschied ist die neue Methode funktioniert auch auf Arrays? Okay. Nützlich, schätze ich - ich muss vielleicht die Person fragen, die diesen Code geschrieben hat, warum wir sie auf 'vector's verwenden und den Code unnötig überflüssig machen, aber ich denke, das beantwortet meine Frage. –
@DarrelHoffman Ich denke, es ist eine Frage der Wahl, aber ich bevorzuge, wenn möglich, Nichtmitgliedsfunktionen zu verwenden. Wenn der Parameter ein Standard-Bibliothekscontainer ist, kann "std ::" weggelassen werden, und "begin (v)" ist nicht viel ausführlicher als "v.begin()". – juanchopanza
Ja, obwohl gefährlich möglicherweise in diesem Fall - Ein großer Teil unserer Code-Basis wird von vielen Teams in verschiedenen Teilen der Welt geteilt, für Legacy-Gründe, von denen einige noch C++ 0x ausgeführt werden. Ich erwarte nicht, dass dieser spezielle Teil des Codes Probleme verursacht, aber es gab in der Vergangenheit Konflikte darüber. (Wir haben bestimmte Klassen zu markieren, wie "No C++ 11 erlaubt", so dass es nicht andere Teams nicht bricht baut ...) –