Forum: PC-Programmierung STL iteratoren


von Jens (Gast)


Lesenswert?

Guten morgen, ich habe eine Frage zur STL. Bisher konnte ich in Bezug 
auf Klassen den Binary scope Operator :: kennenlernen, um entweder aus 
der Main-Funktion auf eine statische variable zuzugreifen oder aber um 
außerhalb der klassedeklaration die einzelnen memberfunktionen zu 
definieren wie z.b. klasse1::foo(){}

Aber das hier verstehe ich nicht: 
class_name<template_parameters>::iterator name

Was ist iterator? Ein statischer datentyp??!

von René H. (Gast)


Lesenswert?

Jens schrieb:
> Was ist iterator? Ein statischer datentyp??!

Ein Iterator wird in einem Template beschrieben, einer 
Meta-Klassenbeschreibung.

Die Instanz selbst ist natürlich ein Obkekt.

Grüsse,
René

von Mikro 7. (mikro77)


Lesenswert?

Jens schrieb:
> Was ist iterator? Ein statischer datentyp??!

Richtig: iterator ist ein Datentyp.

Bspw:
1
tenplate<typename T> struct vector
2
{
3
    typedef T *iterator ;

von Tom (Gast)


Lesenswert?

Ein einfacheres Beispiel:
1
class MyClass
2
{
3
public:
4
    typedef int EntryType;
5
    EntryType get(){return m_Entry;}
6
    // ...
7
    EntryType m_Entry;
8
};
9
10
//...
11
12
    MyClass blubb;
13
    MyClass::EntryType x = blubb.get();

EntryType und dein iterator sind im Sinn der Fragestellung das gleiche, 
nämlich in einer Klasse enthaltene typedefs.

von Jens (Gast)


Lesenswert?

Ah, ok, Vielen Dank für die nützlichen Informationen. Was mich 
allerdings noch etwas verwirrt, ist die Tatsache, dass ich den 
"::"-Operator entweder außerhalb der Klassendeklaration bei der 
Definition der Funktionen oder aber bei der Initialisierung von 
statischen Membervariablen verwendet habe.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Jens schrieb:
> Was mich
> allerdings noch etwas verwirrt, ist die Tatsache, dass ich den
> "::"-Operator entweder außerhalb der Klassendeklaration bei der
> Definition der Funktionen oder aber bei der Initialisierung von
> statischen Membervariablen verwendet habe.

Der ::-Operator wird für externe Zugriffe auf alles verwendet, was
innerhalb der Klasse klassenweit deklariert ist. Darunter fallen neben
Klassenvariablen und -methoden (mit static deklariert) auch
Typedeklarationen, Enum-Konstanten und sicher noch einiges mehr.

Edit: Beispiel vergessen, hier ist es:

1
class C {
2
  public:
3
    typedef int MyInt;
4
    enum MyEnum { ME_ZERO, ME_ONE, ME_TWO };
5
    static int i;
6
};
7
8
void test() {
9
  C::MyInt j = C::i;
10
// ^^           ^^
11
  C::MyEnum me = C::ME_ONE;
12
// ^^             ^^
13
}

: Bearbeitet durch Moderator
von Rolf M. (rmagnus)


Lesenswert?

Jens schrieb:
> Was ist iterator? Ein statischer datentyp??!

Was meinst du mit "statisch"? In C++ kann man nicht für jede Instanz 
einer Klasse eigene Datentypen definieren. Somit gehört ein in der 
Klasse definierter Datentyp immer zur Klasse selbst und nicht zu deren 
Instanzen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.