Avatar billede kernelx Juniormester
09. november 2004 - 07:52 Der er 5 kommentarer og
1 løsning

flexibel array i c++

Hi,

jeg har en C++-klasse:

class Person
{
    private:
    // id, navn, efternavn, etc.
    public:
    // setter og getter, etc.
}

nu vil jeg gerne have et array, som er fyldt op med objekter af denne klasse

Person personObjekter []

problemet er ... jeg ved i forvejen ikke, hvor mange objekter der skal være. Det kan være, at der ikke er nogen som hælst objekter, det kan også være, at der skal komme 100 objekter i dette array.

Men hvis jeg laver et array skal jeg i forvejen sige, hvor mange objekter der skal være plads til. Jeg har engang haft en løsning med pointer - og med new og delete på en eller anden måde - men det er allerede lang tid siden, at jeg har arbejdet med C++ sidst - og jeg har glemt det.

er der en, som har en løsing?


Med venlig hilsen
KernelX
Avatar billede arne_v Ekspert
09. november 2004 - 07:55 #1
STL vector !
Avatar billede arne_v Ekspert
09. november 2004 - 07:56 #2
Eksempel:

#include <iostream>
#include <string>
#include <vector>

using namespace std;

class MyData
{
  private:
      string s;
  public:
      MyData() { s = ""; };
      MyData(string s) { this->s = s; };
      string GetS() { return s; };
      void SetS(string s) { this->s = s; };
};

int main()
{
  vector<MyData*> myvec;
  myvec.push_back(new MyData("A"));
  myvec.push_back(new MyData("BB"));
  myvec.push_back(new MyData("CCC"));
  for(int i = 0; i < myvec.size(); i++)
  {
      cout << myvec[i]->GetS() << endl;
  }
  return 0;
}
Avatar billede kernelx Juniormester
09. november 2004 - 08:06 #3
mange tak!!!

undskyld hvis jeg spørger, men har du et eksempel uden at specielt at includere noget som "vector"?
altså kun iostream og string og ellers selvskrevet c++-kode?

du må gerne skrive dine ting som svar - jeg skal jo af med points :-)
Avatar billede arne_v Ekspert
09. november 2004 - 08:11 #4
Hele pointen er jo netop a bruge noget færdigt og veltestet fremfor
at genopfinde den dybe tallerken.

vector er en del af ANSI C++ og bør derfor være i all C++ compilere
uanset platform.

Jeg har ikke lige  en hjemme lavet vector på lager. Men jeg kunne da sikkert
godt lave en.
Avatar billede bertelbrander Novice
09. november 2004 - 21:20 #5
#include <iostream>

template <typename T> class MyFlexArrayClass
{
public:
  MyFlexArrayClass(size_t aSize = 0) : Array(0), Size(aSize)
  {
      if(aSize)
        Array = new T [aSize];

  }
  ~MyFlexArrayClass()
  {
      delete [] Array;
  }
  const T *GetPointer() const { return Array; }
  T &operator [] (size_t aIdx) { return Array[aIdx]; }
  void ReSize(size_t aNewSize)
  {
      if(aNewSize > Size)
      {
        T *Temp = new T [aNewSize];
        memcpy(Temp, Array, Size*sizeof(T));
        delete [] Array;
        Array = Temp;
        Size = aNewSize;
      }
  }
  size_t GetSize() const { return Size; }
private:
  size_t Size;
  T *Array;
};

int main()
{
  MyFlexArrayClass<int> MyFlexArray(10);
  MyFlexArray[0] = 123;
  MyFlexArray[9] = 10;
  std::cout << MyFlexArray[0] << " " << MyFlexArray[9] << std::endl;
  MyFlexArray.ReSize(20);
  MyFlexArray[19] = 20;
  std::cout << MyFlexArray[0] << " " << MyFlexArray[9] << " " << MyFlexArray[19] << std::endl;
}
Avatar billede kernelx Juniormester
10. november 2004 - 18:37 #6
wow ... mange tak!!!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester