In dem Buch Programming Principles and Practice mit C ++ von B. Stroustrup bin ich auf ein Stück Code gestoßen, bei dem das Argument das Array einer Basisversion der Vektorklasse ist. Die Klasse ist als
definiert %Vor%Meine Fragen: Ist 'arg.elem.sz' ein gültiger Ausdruck? Wenn ja, auf was wird zugegriffen?
(Übrigens, ich habe versucht, ein einfaches Stück Code zu schreiben, um dies zu versuchen, aber ich bekomme einen Fehler. Da arg.elem ein Zeiger ist, erwartet es, dass ich etwas mehr wie "arg.elem- & gt." ;)
Danke!
EDIT / UPDATE: Die Syntax scheint korrekt zu sein. Betrachtet man die Definition von Kopie, ist das Argument ein "Iterator". Ich vermute, dass es etwas geben muss, um das Argument in einen Iterator-Typ zu konvertieren, dann wird das sz-th pointed-Element auf das Element des Iterators zugreifen? Abklärungen wurden begrüßt:)
Dies ist nur ein Tippfehler, das arg.elem.sz
ist kein gültiger Ausdruck, weil arg.elem
ein double*
ist, auf das kein Mitglied zugreifen kann (auch nicht mit dem ->
opertor). Es sollte arg.elem + sz
da sein, denn so funktioniert std::copy
.
In Ihrem Update haben Sie nach dem Iterator und dem std::copy
Algorithmus. Die std::copy
ist eine Funktionsvorlage , die jeden Typ als Eingabe und als Ausgabe-Iteratoren akzeptiert, wenn sie die Anforderungen erfüllen Anforderungen eines Eingabe-Iterators und einer Ausgabe-Iterator . Ein Zeiger auf ein Array-Element erfüllt die genannten Anforderungen, sodass arg.elem
als double*
als Iterator verwendet werden kann.
Wenn wir die fragliche Codezeile in das Folgende ändern, ergibt das einen Sinn:
%Vor% Der obige Code kopiert den Inhalt des Arrays zwischen arg.elem
und arg.elem + sz
in das Array, auf das elem
zeigt.
Tags und Links c++