matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Hochschulmathe
  Status Uni-Analysis
    Status Reelle Analysis
    Status UKomplx
    Status Uni-Kompl. Analysis
    Status Differentialgl.
    Status Maß/Integrat-Theorie
    Status Funktionalanalysis
    Status Transformationen
    Status UAnaSon
  Status Uni-Lin. Algebra
    Status Abbildungen
    Status ULinAGS
    Status Matrizen
    Status Determinanten
    Status Eigenwerte
    Status Skalarprodukte
    Status Moduln/Vektorraum
    Status Sonstiges
  Status Algebra+Zahlentheo.
    Status Algebra
    Status Zahlentheorie
  Status Diskrete Mathematik
    Status Diskrete Optimierung
    Status Graphentheorie
    Status Operations Research
    Status Relationen
  Status Fachdidaktik
  Status Finanz+Versicherung
    Status Uni-Finanzmathematik
    Status Uni-Versicherungsmat
  Status Logik+Mengenlehre
    Status Logik
    Status Mengenlehre
  Status Numerik
    Status Lin. Gleich.-systeme
    Status Nichtlineare Gleich.
    Status Interpol.+Approx.
    Status Integr.+Differenz.
    Status Eigenwertprobleme
    Status DGL
  Status Uni-Stochastik
    Status Kombinatorik
    Status math. Statistik
    Status Statistik (Anwend.)
    Status stoch. Analysis
    Status stoch. Prozesse
    Status Wahrscheinlichkeitstheorie
  Status Topologie+Geometrie
  Status Uni-Sonstiges

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenC/C++Container, Vecor, Templates
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Geschichte • Erdkunde • Sozialwissenschaften • Politik/Wirtschaft
Forum "C/C++" - Container, Vecor, Templates
Container, Vecor, Templates < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Container, Vecor, Templates: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 13:50 Do 04.02.2010
Autor: nana

Hallo!!
Ich habe ein paar Fragen zu generischen Klassen und Prozeduren, sowie zu Containern...
Also im Grunde ist mir klar warum man Templates verwendet: um eine Prozedur oder eine Klasse unabhängig von best Datentypen zu machen, oder?
Bei einer Prozedur wird das dann so geschrieben:
template< class T> void tausche (T& a, T& b)
kann ich jetzt die Methode tausche einfach ganz normal aufrufen? also zB
tausche (5,6)
oder muss das so aufgerufen werden?:
void tausche<int> (int& a, int& b)
was ist der Unterschied?

Bei einer Klasse:
template<class T> class SimpleArray
(muss es eig T sein oder kann es auch ein anderer Buchstabe sein oder sogar kleingeschrieben und mit mehreren Zeichen??)
In der Folie der Vorlesung steht:
"In dem Template ist der Klassenname SimpleArray<T> zu verwenden.(Aber nicht für Operationsnamen für Konstruktor und Destruktor.)" -> was bedeutet denn eig template, bzw was genau ist das Template?? die generische Klasse, oder was genau?? das bsp ist jedenfalls so:
template <class T> SimpleArray<T>::SimpleArray (int r, T f)
dh man muss anstatt SimpleArray immer SimpleArray<T> schreiben, oder??
auch hier wieder die gleiche Fragestellung wie oben:
SimpleArray<int> g (3,4) muss man das so machen oder reicht nicht SimpleArray g(3,4) ???

Soo...jetzt zu den Containern...
Was ist eig ein Container?? Ist das eine Art Datentyp wie Liste (meine mal sowas gelesen zu haben) ???
und was ist dann ein Vector bzw eine map??
Mir ist das in den Erklärungen bis jetzt immer ein wenig zu abstrakt gewesen...

Vielen Dank für alle ANtworten!!!
LG, nana



        
Bezug
Container, Vecor, Templates: Antwort
Status: (Antwort) fertig Status 
Datum: 07:18 Fr 05.02.2010
Autor: felixf

Hallo nana!

>  Ich habe ein paar Fragen zu generischen Klassen und
> Prozeduren, sowie zu Containern...
>  Also im Grunde ist mir klar warum man Templates verwendet:
> um eine Prozedur oder eine Klasse unabhängig von best
> Datentypen zu machen, oder?

Genau.

>  Bei einer Prozedur wird das dann so geschrieben:
>  template< class T> void tausche (T& a, T& b)

>  kann ich jetzt die Methode tausche einfach ganz normal
> aufrufen? also zB
> tausche (5,6)

So sicher nicht: es gibt keine Moeglichkeit T so zu waehlen, dass 5 und 6 vom Typ T & sind.

Eher sowas wie:

1: int & a, b;
2: tausche(a, b);


>  oder muss das so aufgerufen werden?:
>  void tausche<int> (int& a, int& b)

Nein, so kannst du es nicht aufrufen. Entweder tausche(a, b) oder tausche<int>(a, b).

Das zweite ist z.B. hier wichtig:
1: template<class T> T summe(T a, T b) { return a + b; }
2: summe<int>(1, 1.5);


Wenn man nur summe(1, 1.5) schreibt, weiss der Compiler nicht, ob T nun ein int oder ein float/double ist. Wenn man aber T = int explizit vorgibt, weiss der Compiler dass ein int gemeint ist. Das Argument 1.5 wird nun erst automatisch zu einem int konvertiert (also zu 1), bevor 1 und 1 addiert werden und 2 (als int) zurueckgegeben wird.

>  was ist der Unterschied?

Ich hoffe das ist jetzt etwas klarer.

> Bei einer Klasse:
>  template<class T> class SimpleArray

>  (muss es eig T sein oder kann es auch ein anderer
> Buchstabe sein oder sogar kleingeschrieben und mit mehreren
> Zeichen??)

Es kann irgendein Bezeichner sein, der nicht innerhalb der Klasse anders verwendet werden soll ;-)

Zum Beispiel kann man auch sowas wie

template<class Skalar> class Vektor { ... }

machen.

>  In der Folie der Vorlesung steht:
>  "In dem Template ist der Klassenname SimpleArray<T> zu

> verwenden.(Aber nicht für Operationsnamen für Konstruktor
> und Destruktor.)" -> was bedeutet denn eig template, bzw
> was genau ist das Template?? die generische Klasse, oder
> was genau?? das bsp ist jedenfalls so:
>  template <class T> SimpleArray<T>::SimpleArray (int r, T

> f)
>  dh man muss anstatt SimpleArray immer SimpleArray<T>

> schreiben, oder??

Ja. (Eventuell gibt's ein paar Aussagen, da bin ich mir gerade nicht 100%ig sicher, aber im Zweifelsfall ist das <T> da immer besser.)

>  auch hier wieder die gleiche Fragestellung wie oben:
>  SimpleArray<int> g (3,4) muss man das so machen oder

> reicht nicht SimpleArray g(3,4) ???

Bei der Deklaration von g vom Typ SimpleArray<int> musst du das <int> schon angeben.

> Soo...jetzt zu den Containern...
>  Was ist eig ein Container?? Ist das eine Art Datentyp wie
> Liste (meine mal sowas gelesen zu haben) ???

Ja, wobei es etwas abstrakter ist. Ob der Container nun im Endeffekt eine (verkettete) Liste, ein Array, ein Baum, eine Hashtabelle oder sonstwas ist, ist voellig egal. Ein Container ist einfach etwas abstraktes, wo man Objekte reinstecken und wieder rausholen kann. Es ist sozuagen ein Konzept, und eine generische Klasse kann eine spezielle Art von Container "implementieren" (die wiederum unabhaengig vom Datentyp ist, weil generisch).

>  und was ist dann ein Vector bzw eine map??

Das sind jeweils Container, bzw. verschiedene Realisierungen des Konzeptes Container.

> Mir ist das in den Erklärungen bis jetzt immer ein wenig
> zu abstrakt gewesen...

Es ist auch sehr Abstrakt ;-)

Aber irgendwann gewoehnt man sich dran. Mal ein Beispiel. Wenn du eine einfache Sortierroutine schreiben willst (die nur mit zwei benachbarten Elementen schreibst), brauchst du ja nur eine Datenstruktur wo du zum naechsten/vorherigen Element kommen kannst und weisst ob du beim letzten oder ersten Element bist. Ob die Elemente nun als Array oder Liste gespeichert werden ist dir ziemlich egal. Also schaust du nach, ob es ein Konzept gibt, welches gerade das bedient (z.B. ein (spezieller) Container) und schreibst deine Sortierungs-Routine so, dass sie mit allen Containern (oder allen Containern eines bestimmten Types, wie etwa vector und list, aber nicht map) zusammenarbeitet.

(Falls du mal mit Java gearbeitet hast: Interfaces dort sind sozusagen formalisierte Versionen eines Konzeptes wie Container: sie sagen genau was ein Container koennen soll. In C++ ist ein solches Konzept nicht umbedingt formal fixiert.)

LG Felix


Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.unimatheforum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]