Iteratorschleifen in C++ [] (Iteratorschleifen in C++), Lektion, Seite 723717
https://www.purl.org/stefan_ram/pub/iteratorschleifen_c++ (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C++-Kurs

Traditionelle Schleifen mit Iteratoren in C++

Nicht-konstante Indikatoren (Schreibindikatoren)

Die von uns oben verwendeten „konstanten“ Indikatoren erlauben keinen Schreibzugriffe der Art wie »*p=«, dafür sind „nicht-konstante“ Indikator zu verwenden, die mit »begin« und »end« erhalten werden.

main.cpp

#include <initializer_list>
#include <iostream>
#include <iterator>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main()

{ ::std::string s = "pqr"s;
auto p = begin( s );
*p = 'x';
::std::cout << s << '\n'; }

transcript
xqr

»*«

Der Operator »*« ergibt das Objekt an der durch den Indikator angegebenen Position.

Der Wert an der Position einer Indikators »p« ist »*p«.

main.cpp

#include <iostream>
#include <ostream>
#include <string>
#include <iterator>
#include <initializer_list>

using namespace ::std::literals;

int main()
{ ::std::string const str{ "abc"s };
auto const s0 = cbegin( str );
::std::cout << *s0 << '\n'; }

::std::cout
a
main.cpp

#include <iostream>
#include <ostream>
#include <string>
#include <iterator>
#include <initializer_list>

using namespace ::std::literals;

int main()

{ ::std::string s = "pqr"s;
auto p = cbegin( s );
while( p != cend( s ))::std::cout << *p++ << '\n'; }

transcript
p
q
r

Bei fundamentalen Typen hilft ADL nicht, und man muß wieder »::std::« verwenden.

main.cpp

#include <iostream>
#include <ostream>
#include <string>
#include <iterator>
#include <initializer_list>

using namespace ::std::literals;

int main()

{ int a[]{ 1, 2, 3 };
auto p = ::std::cbegin( a );
while( p != ::std::cend( a ))::std::cout << *p++ << '\n'; }

transcript
1
2
3

Indikatorenwertige Funktionen als Elementfunktionen
Weitere Notizen und Beispiele

main.cpp

#include <iostream>

#include <ostream>

#include <iterator>

int main()

{ int a[]{ 1, 2, 3 };

auto p = cbegin( a );

while( p != cend( a ))::std::cout << *p++ << '\n'; }

::std::cout
1
2
3
main.cpp

#include <iostream>

#include <ostream>

#include <iterator>

int main()

{ int a[]{ 1, 2, 3 };

auto p = cbegin( a );

while( p != cend( a ))::std::cout << *p++ << '\n'; }

::std::cout
1
2
3
main.cpp

#include <iostream>
#include <ostream>
#include <string>
#include <iterator>
#include <initializer_list>

using namespace ::std::literals;

int main()
{ ::std::string str{ "abc"s };
auto const beg = cbegin( str );
auto const top = cend( str );
for( auto p = beg; p != top; ++p )::std::cout << *p;
::std::cout << '\n'; }

::std::cout
abc
main.cpp

#include <iostream>
#include <ostream>
#include <string>
#include <iterator>
#include <initializer_list>

using namespace ::std::literals;

int main()
{ ::std::string str{ "abc"s };
::std::string::iterator const beg = cbegin( str );
::std::string::iterator const top = cend( str );
for( ::std::string::iterator p = beg; p != top; ++p )::std::cout << *p;
::std::cout << '\n'; }

::std::cout
abc
main.cpp

#include <iostream>
#include <ostream>
#include <string>
#include <iterator>
#include <initializer_list>

using namespace ::std::literals;

int main()
{ ::std::string str{ "abc"s };
for( ::std::string::value_type ch : str )::std::cout << ch; ::std::cout << '\n';
for( auto ch : str )::std::cout << ch; ::std::cout << '\n'; }

::std::cout

abc

abc

Kategorien

Man unterscheidet verschiedene Kategorien von Indikatoren:

Manche lassen sich mit ++ vorwärts bewegen (Vorwärts-Indikatoren).

Manche lassen sich mit -- rückwärts bewegen (Rückwärts-Indikatoren).

Manche sind Vorwärts-Indikatoren und Rückwärts-Indikatoren gleichzeitig (bidirektionale Indikatoren)

Wenn ein Indikator eine Position P angibt, so sagen wir auch, er sein ein Indikator jener Position P oder er indiziere jene Position.

/ˈɪtəˌret ɚ/

Lat. iterum („wiederholt“)

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723717 stefan_ram:723717 Iteratorschleifen in C++ Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723717, slrprddef723717, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/iteratorschleifen_c++