Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Stl-struktur übergeben

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.10.2002, 12:48 Uhr
~gemma
Gast


Hi!

Ich hätte mal ne frage bezüglich einer STL-Datenstruktur, egal ob es sich jetzt um einen Vector, eine List oder sonst was handelt...... Nachdem ich so eine Struktur in einer Funktion erstellt habe, möchte ich sie gerne einer anderen Funktion übergeben....... Deshalb muß ich sie ja mit dem new-Operator erstellen, doch wie geht das mit einer STL-Struktur....? und wie sieht dann die Schnittstelle der Funktion aus?

thx
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.10.2002, 13:10 Uhr
void*
Generic Pointer
(Operator)


Hallo!

Ich verstehe Deine Frage noch nicht so ganz:
Was meinst Du mit an eine andere Funktion übergeben?
1. An eine übergeordnete (aufrufende) Funktion?
2. An eine untergeordnete (aufgerufene) Funktion?

Eine Sache ist jedenfalls klar: Es macht (mal abgesehen von Performance) keinen Unterschied, ob Du einen eigenen, einen eingebauten oder STL-Datentyp verwendest.

Gruß
void*
--
Gruß
void*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.10.2002, 13:23 Uhr
~gemma
Gast


ich habe einfach in einer Funktion einen vector erstellt. Da dies aber in der Funktion geschieht, ist der vector nicht global und nur zur Laufzeit der einen Funktion bekannt..... -> lokale Variable. Da ich diesen Vector jetzt aber auch in einer anderen Funktion benötige, muß ich ihn irgendwie an die nächste Funktion übergeben können........ nur ich weiß nicht wie?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.10.2002, 13:56 Uhr
fry_



Hallo,

meiner Meinung nach kannst Du New in vector nicht verwenden. Am Besten arbeitest Du mit Adresse übergeben:

C++:
#include <iostream>
#include <vector>

using namespace std;

typedef vector<int>::const_iterator VI;

// vector ausgeben
void print_vector(vector<int>* _vtor)
    { for (VI i=_vtor->begin(); i!=_vtor->end(); ++i)
        cout << *i << endl; }

// vektor zB. füllen
void fill_vector(vector<int>* _vtor)
    { _vtor->push_back(7);
    _vtor->push_back(3);
    _vtor->push_back(13);
    print_vector(_vtor); } // diesen vector an Funktion 'print_vector' übergeben

// Vektor erstellen
void create_vector()
    { vector<int> the_vector;
    fill_vector(&the_vector); } // übergeben an Funktion 'fill_vector'

int main()
    { create_vector(); }


... oder wenn Du einen vector in einer Funktion kopieren möchtest:

C++:
// Beide Adressen übergeben u. dann kopieren
void copy_vector(vector<int>* _vtor2, vector<int>* _vtor1)
    { *_vtor2=*_vtor1;
             //--


/Edit
bzw.

C++:
//--

void fill_vector(vector<int>* _vtor)
    { _vtor->push_back(7);
    _vtor->push_back(3);
    _vtor->push_back(13); }

void create_vector()
    { vector<int> the_vector;
    fill_vector(&the_vector); }

void copy_vector(vector<int>* _vtor)
    { vector<int> the_vector=*_vtor; // den Inhalt an einem anderen Vektor übergen
    //--
                                                      }
int main()
    { vector<int> the_vector;
    fill_vector(&the_vector); // erstellten vector füllen...
    copy_vector(&the_vector); } // ... und übergeben


Meintest Du das? Sonst poste doch einfach ein Beispiel, wie Du Dir das
in etwa vorgestellt hast.

Gruß
--
mit computern geht alles viel schneller
es dauert nur ein bisschen länger

Dieser Post wurde am 20.10.2002 um 14:15 Uhr von fry_ editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.10.2002, 14:13 Uhr
void*
Generic Pointer
(Operator)


Hallo!

1. new geht natürlich
2. Am einfachsten sind wohl Referenzen (und am meisten C++-Stil)

Ein Bsp. das alle Möglichkeiten ausschöpft:

C++:
#include <vector>
#include <iostream>

void g(const std::vector<int>& lvec)
{
  // hier kann der vector gelesen, aber nicht verändert werden
  std::cout << lvec.size();
}

void f(std::vector<int> &lvec)
{
  // hier kann man mit dem vector alles machen, das Original wird verändert, z.B.
  lvec.push_back(33);
}

void h(std::vector<int> *pvec)
{
  // hier kann man mit dem vector alles machen, das Original wird verändert, z.B.
  pvec->push_back(33);
}

void i(const std::vector<int> *pvec)
{
  // hier kann der vector gelesen, aber nicht verändert werden, z.B.
  std::cout << pvec->size();
}

void j(std::vector<int> lvec)
{
  // hier kann man alles mit dem vector machen, aber es wird nur die lokal Kopie verändert!
  // Achtung: wenig effizient, da der ganze vector bei jedem Auruf kopiert werden muss
  lvec.push_back(33);
}

int main(void)
{
  // nur als Anmerkung: Das geht natürlich
  std::vector<int> *pVector=new std::vector<int>;
  delete pVector;

  // Bsp.
  std::vector<int> vec;
  g(vec);
  f(vec);
  h(&vec);
  i(&vec);
  j(vec);

  return(0);
}



Gruß
void*
--
Gruß
void*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.10.2002, 14:18 Uhr
fry_



@void*
... gut, zu wissen!
--
mit computern geht alles viel schneller
es dauert nur ein bisschen länger
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.10.2002, 16:06 Uhr
~gemma
Gast


hey danke leute!
ich glaube so wirds hinhauen

thx alot
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: