variable Mengen in C++



  • Du hast 2 Möglichkeiten:

    1. std::vector<DeineKlasse>

    Damit kannst Du beliebig viele Elemente halten.

    Ein Array aufmachen und wenn nicht genug reinpasst das machen was vector auch macht: Neuen Speicher auftreiben und alles umkopieren.

    Der std::vector soll Dir ja nur helfen beliebig viele Deiner Klassen zu halten.



  • also ein feld zu erzeugen ist nicht der sinn der aufgabe, denn die haben ja immer feste feldgrößen...

    es geht ja eben um dynamische speicherverwaltung und zwar objektorientiert...

    erklär mir doch mal einer die zeile std::vector<DeineKlasse>
    was bedeutet das im einzelnen???



  • Jerome83 schrieb:

    also ein feld zu erzeugen ist nicht der sinn der aufgabe, denn die haben ja immer feste feldgrößen...

    es geht ja eben um dynamische speicherverwaltung und zwar objektorientiert...

    ja, aber man kann in c++ auch dynamische speicher allockieren...
    so z.B.

    int size = 124;
    int* array = new int[size];
    
    for(int i=0; i<size; ++i)
        array[i] = 0;
    

    die größe lässt sich zwar nicht mehr ändern aber man kann den ganzen
    müll ja in ein größeres array kopieren und das alte wieder freigeben...

    und genau das macht std::vector...

    "std" is ein namespace und "vector<...>" ist ne template klasse.
    also entweder du benutzt std::vector oder du machst das selbst...

    mfg
    Plassy



  • Jerome83 schrieb:

    erklär mir doch mal einer die zeile std::vector<DeineKlasse>
    was bedeutet das im einzelnen???

    http://www.schornboeck.net/ckurs/vector.htm
    die Seite sagt eigentlich alles...



  • Jerome83 schrieb:

    also ein feld zu erzeugen ist nicht der sinn der aufgabe, denn die haben ja immer feste feldgrößen...

    es geht ja eben um dynamische speicherverwaltung und zwar objektorientiert...

    erklär mir doch mal einer die zeile std::vector<DeineKlasse>
    was bedeutet das im einzelnen???

    http://www.hrz.uni-dortmund.de/computerPostille/Juni1992/9)Objektorientierung.html

    Objektorientiert wird dein Programm _nicht_, indem du Speicher dynamisch
    allokierst.

    Klar hat ein Feld eine bestimmte groesse, aber du sagtest:

    Also ein dynamisches Feld, jeder Anwender kann also festlegen wie viele
    Elemente er eingeben will (pro Menge).

    was bedeutet, das es gar keine Probleme macht, entsprechend Speicher zu
    reservieren, da du den User vorher eingeben laesst, wieviel Elemente er
    pro Menge eingeben will.

    Ich sehe in deiner Aufgabenstellen wirklich kein Problem.

    mfg
    v R



  • @Plassy: naja, also mit vector wird das nix. das ist ne template klasse wie du sagtest. da das aber nie bei mir drangenommen wurde werd ich es nicht verwenden, dann weiß der sofort das das program nicht von mir ist. ich mein, es wär schön wenn ichs allein hinbekommen würde, aber ich peils halt einfach nicht so gut wie andere...

    @virtuell Realisticer: ja, so wäre das kein thema. aber dann bräuchte ich auch eine klassen wenn ich den benutzer vorher frage wieviele elemente seine mengen haben, das wäre ja dann einfach, das würd ich wohl hinbekommen. aber in dem fall würde der speicher ja in dem moment für sämtliche elemente die der anwender eingeben würde, schon vorher reserviert. es gfeht hier aber darum das der speicher für jedes einzelne element der menge in dem moment den speicher freigibt wenn es erzeugt wird. das muss irgendwie mit dem operator "new" gehen.
    bin jetzt soweit in meiner überlegung das ich für jede der mengen eine eigene klasse definieren muss und die elemente der menge in einer einfach verketteten liste eingeben lasse. und da ist die speicherverwaltung ja dynamisch, oder? denn immer wenn ein eölement hinten rangehängt wird wird in dem moment vorher sein speicher reserviert, oder?

    hat jemand mal ein beispiel für so ne verk. liste anzubieten, denn das zu programmieren schaff ich wohl nie alleine.....

    ciao und danke für die mühen, jerome.....



  • bei euch gilt es als betrug, wenn man sich ausserhalb des unterrichts mehr zu einem thema aneignet?
    diese schule wuerde ich anzuenden.



  • lieber mal alle streichhölzer verstecken, sonst gibts ein unglück



  • naja, was heißt betrug.

    es ist nicht inhalt der aufgabe dinge zu verwenden die nicht behandelt wurden. wir sollen ja das problem mit dem gelernetn umsetzen und nicht mit anderen dingen...

    also, hat jemand solch ein programm mit einer einfach verketteten liste???



  • Hm, habt ihr denn schon Zeiger dranngenommen ?

    struct foo
    {
     foo * prev;
     foo * next;
     T     Daten;
    };
    

    Dazu schreibst Du Dir eine Methode die neue Elemente Eintragen und entfernen kann. Du mußt halt immer dafür sorgen das die Zeiger prev und next auf das richtige Element zeigen.

    Wir wissen nicht was Du bereits an wissen durch die Schule hast und Du daher anwenden kannst.



  • mh, logisch hatten wir zeiger, haben ja auch verkettete listen besprochen.

    aber den zeiger auf den vorgänger halte ich für überflüssig, da ich ja nix löschen will in der liste...

    kannst du mir mal ne klasse MENGE definieren???



  • Hier mal eine schnelle Klasse
    Header

    class CFileliste  
    {
    public:
    	CFileliste *m_pNext;
    	CFileliste(CFileliste *pNext);
    	virtual ~CFileliste();
    	int m_listid;
    };
    

    CPP-Datei

    #include "Fileliste.h"
    
    CFileliste::CFileliste(CFileliste *pNext)
    {
    	m_pNext=pNext;
    	m_listid = 0;
    }
    
    CFileliste::~CFileliste()
    {
    
    }
    

    Die Implementierung

    Header

    CFileliste *m_pfilelist;
    	void addfiletolist();
    

    Cpp-Datei

    void CProgrammeDlg::addfiletolist()
    {
    	CFileliste *pdatenzeiger;
    	pdatenzeiger=new CFileliste(m_pfilelist);
    	m_pfilelist=pdatenzeiger;
    }
    
    ProgrammeDlg::CProgrammeDlg(CWnd* pParent /*=NULL*/)
    	: CDialog(CProgrammeDlg::IDD, pParent)
    {
    	m_pfilelist=NULL; 
    
    }
    
    CProgrammeDlg::~CProgrammeDlg()
    {
    	CFileliste *temp;
    	while(m_pfilelist!=NULL)
    	{
    		temp=m_pfilelist->m_pNext;
    		delete m_pfilelist;
    		m_pfilelist=temp;
    	}
    }
    


  • elises lanchrichten sind einfach immer wieder gut. Das wollte ich einfach mal loswerden.

    aber den zeiger auf den vorgänger halte ich für überflüssig, da ich ja nix löschen will in der liste...

    Es geht nicht ums löschen, sondern darum von einem Element wieder zu seinem Vorgänger zu kommen.



  • helium logged out schrieb:

    Es geht nicht ums löschen, sondern darum von einem Element wieder zu seinem Vorgänger zu kommen.

    Vielleicht will er das ja auch nicht.



  • Also wenn ich den von mir Zitierteen Text so ansehe, scheint er der meinung zu sin, dass man nur zum Vorgänger möchte um irgendwas zu löschen. Mir fällt da Spontan aber noch den Wert auszulesen und ihn zu verändern ein.



  • Mir faellt dazu ganz einfach ein, sich einfach nur vor und zurueck zu bewegen.

    mfg
    v R



  • Vielleicht will er das gar nicht. Ich nehm mal stark an, dass es offensichtlich ist, dass man in einer einfach verketteten Liste nicht rückwärts gehen kann. Was nicht ganz so offensichtlich ist, ist, dass man das aktuelle Element nicht in O(1) entfernen kann. Deshalb hat er nur gesagt, dass er das nicht will, weil das andere ja eh klar ist.



  • ich brauch den zeiger auf den vorgänger doch nicht, ich will die liste weder rückwärts durchsuchen noch irgendwas löschen...

    aber um mal ehrlich zu sein: der quelltext ist mir schleierhaft!

    warum brauch ich extra noch ne headerdatei? ist doch quatsch, das muß auch ohne gehen. kann man denn nicht ne einfach verkettete liste in form einer klasse definieren? und wenn ja, könnte das mal jemand MIT kommentaren zu den einzelnen zeilen tun?

    vielen dank schonmal.

    ciao, jerome.....



  • Hm, irgendwie hab ich das Gefühl Du suchst jemanden der Deine Hausaufgaben macht.

    (Übrigns bigts auch ne std::list<> ;o) )

    Such mal bitte bei Google nach verketteten Listen oder hier im Forum. Du wirst sicherlich vieles Finden was besser beschrieben ist als es jemand hier auf die schnelle machen könnte.



  • Jerome83 schrieb:

    aber um mal ehrlich zu sein: der quelltext ist mir schleierhaft!

    warum brauch ich extra noch ne headerdatei? ist doch quatsch, das muß auch ohne gehen. kann man denn nicht ne einfach verkettete liste in form einer klasse definieren? ciao, jerome.....

    Und was glaubst du aus was eine Klasse besteht.
    Aus einer Header und einer CPP-Datei


Anmelden zum Antworten