Ich schreibe (als Selbstlernübung) einen einfachen STL-ähnlichen Bereich. Es ist ein "Container" mit unveränderlichem Zufallszugriff. Mein Bereich speichert nur das Startelement, die Anzahl der Elemente und die Schrittweite (die Differenz zwischen zwei aufeinanderfolgenden Elementen):
struct range
{
...
private:
value_type m_first_element, m_element_count, m_step;
};
Da mein Bereich die Elemente nicht enthält, wird das gewünschte Element wie folgt berechnet:
// In the standards, the operator[]
// should return a const reference.
// Because Range doesn't store its elements
// internally, we return a copy of the value.
value_type operator[](size_type index)
{
return m_first_element + m_step*index;
}
Wie Sie sehen können, erhalte ich keine const reference
wie es in den Normen heißt. Jetzt, kann ich davon ausgehen, dass ein const reference
und eine Kopie des Elements gleich sind, wenn man die nicht-mutierenden Algorithmen der Standardbibliothek verwendet?
Für jeden Ratschlag zu diesem Thema bin ich dankbar.
@Steve Jessop: Es ist gut, dass Sie Iteratoren erwähnt haben.
Eigentlich habe ich sgi als meine Referenz . Am Ende dieser Seite heißt es:
Angenommen, x und y sind Iteratoren aus demselben Bereich:
Invarianten Identität
x == y if and only if &*x == &*y
Es läuft also auf die gleiche ursprüngliche Frage hinaus, die ich eigentlich gestellt habe :)