Permalänk
Medlem

Deklaration av vektor i C++

Hej!

Har ett problem som jag vill lösa i C++.

Har två klasser, den ena klassen skapar en instans av den andra klassen. Nu vill jag att en medlemsvariabel, int, i den första klassen ska styra hur stor en vektor ska bli i den andra klassen. Hur löser jag detta?

Hur deklarerar jag vektorn i den andra klassen?
class....{
vec[?]; // ?=storleken från min int-variabel
}

Man kan ju skicka int-variablen till konstruktorn till den andra klassen, men problemet finns ju kvar hur vektorn ska deklareras. Kompilatorn köper ej vec[].

Visa signatur

[ Nocz = Negative, Overflow, Carry, Zero ]

Permalänk
Medlem

#include <vector> ... ... std::vector<int> vec;

Sen är det skit samma med storleken
Annars får du väl blanda in malloc och då blir det väl lite fult.

Permalänk
Medlem

Humm.. är inte helt hundra på vad du menar, men något av dom här alternativen borde ju funka:

// alt.1 class A { public: int size; }; class B { public: int *array; B(A *a) { array = new int[a->size]; } ~B() { delete[] array; } }; // alt.2 class A { public: int size; }; class B { public: std::vector<int> array; B(A *a) { array.resize(a->size); } };

I det senare alternativet så slipper du frigöra minnet manuellt, eftersom std::vector gör det åt dig.. Så jao det är helt enkelt en smaksak och hur ofta du ska ändra storleken på vectorn.

Permalänk
Medlem

En dynamisk vektor vad precis det jag sökte. Skönt att man slipper tänka på avallokering också Tack för tipset!

Visa signatur

[ Nocz = Negative, Overflow, Carry, Zero ]

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Nocz
En dynamisk vektor vad precis det jag sökte. Skönt att man slipper tänka på avallokering också Tack för tipset!

Om du vet hur många element du kommer att behöva kan det av prestandaskäl vara en god ide att göra ungefär så här:

Citat:

Ursprungligen inskrivet av pago

// alt.2
class A {
public: int size;
};

class B {
public: std::vector<int> array;

B(A *a) {
array.resize(a->size);
}
};

men med array.reserve(a->size) istället för array.resize(a->size);

Permalänk
Avstängd

Ifall man allokerar objekt (i.e. new) och sedan lägger in dem i en vector (stl) så frigörs ej det minnet när vectorns destruktor kör.

Finns ett API som kallas Boost till C++ som har en vector som heter CVector som även tar hand om avallokeringen utav objekt.