011
21.09.2007, 16:03 Uhr
0xdeadbeef
Gott (Operator)
|
Das ist...so...nicht ganz korrekt.
Darüber, wie std::copy implementiert ist, macht der Standard keine Aussage. Der Algorithmus erwartet lediglich Eingaben, die die Konzepte "InputIterator" bzw. "OutputIterator" erfüllen - zum Beispiel hat die GNU libstdc++ für std::copy eine Reihe von Konkretisierungen, die std::memcpy benutzen - immer dann, wenn es um Basistypen geht.
Aus dem Standard entnommen:
Zitat von C++-Standard 25.2.1.1: |
Effects: Copies elements in the range [first, last) into the range [result, result + (last - first)) starting from first and proceeding to last. For each non-negative integer n < (last-first), performs *(result + n) = *(first + n).
|
...die Beschreibung ist etwas schwammig, da std::copy das Konzept RandomAccessIterator nicht verlangt, und die meisten Implementierungen von std::copy werden das wohl in etwa so machen, wie du dir das vorstellst, aber du kannst nicht hingehen, eine halbe Iteratorklasse mit nur diesen Operationen erstellen, die an std::copy verfüttern und dann verlangen, dass dein Code portabel ist. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |