Um die Verwendung der bereichsbasierte for-Schleife Sie haben, um entweder begin()
und end()
Mitgliederfunktionen oder Überlastung des Dritt begin()
und end()
Funktionen zu machen. Im letzteren Fall können Sie Ihr Angebot in einer std::pair
und Überlastung begin()
und end()
für diejenigen, wickeln:
namespace std {
template <typename T> T* begin(std::pair<T*, T*> const& p)
{ return p.first; }
template <typename T> T* end(std::pair<T*, T*> const& p)
{ return p.second; }
}
Jetzt können Sie die for-Schleife wie folgt verwenden:
for (auto&& i : std::make_pair(array, array + size))
cout << i << endl;
Hinweis, dass das nicht-Mitglied begin()
und end()
Funktionen müssen hier im std
Namespace überlastet werden, da pair
liegt auch im Namensraum std
. Wenn Sie nicht das Gefühl, mit den Standard-Namespace wie Manipulation, können Sie einfach Ihre eigenen kleine Paar Klassen erstellen und überlasten begin()
und end()
in Ihrem Namensraum.
Oder eine dünne Hülle um Ihren dynamisch zugewiesenen Array erstellen und begin()
und end()
Member-Funktionen bieten:
template <typename T>
struct wrapped_array {
wrapped_array(T* first, T* last) : begin_ {first}, end_ {last} {}
wrapped_array(T* first, std::ptrdiff_t size)
: wrapped_array {first, first + size} {}
T* begin() const noexcept { return begin_; }
T* end() const noexcept { return end_; }
T* begin_;
T* end_;
};
template <typename T>
wrapped_array<T> wrap_array(T* first, std::ptrdiff_t size) noexcept
{ return {first, size}; }
Und Ihr Aufrufort sieht wie folgt aus:
for (auto&& i : wrap_array(array, size))
std::cout << i << std::endl;
Example
was Sagen die Fehler? Mindestens post ** ein ** Fehler – Default
es heißt Range-basierte für Schleife und SO und Google haben Tonnen von Beispielen – stijn
[Fehler] C: \ Benutzer \ Siegfred \ Dokumente \ C-Free \ Temp \ Untitled2.cpp: 16: 16: error: keine passende Funktion für den Aufruf von 'begin (int * &)' –