Forum: PC-Programmierung Vektor mit variablen erstellen c++


von Frank (Gast)


Lesenswert?

Hallo, ich möchte gerne einen Vektor erstellen, dessen länge variable 
ist. ICh habe die zwei variablen N und M. Diese sind immer 
unterschiedlich, mal 5,20,100 oder anders.
Jetzt möchte ich gerne einen Vektor erstllen
1
 int Vektor[N*M];
Da gibt er mir aber einen Fehler mit: Konstantenausdruck erwartet.
Aber N*M bleibt ja konstant. Wenn die wieder geändert werden, soll er 
halt den Vektor neu berechnen

Wie kann ich sonst den Vektor erstellen?

von Peter II (Gast)


Lesenswert?

Frank schrieb:
> Wie kann ich sonst den Vektor erstellen?

wenn N*M Funktionsparameter sind, dann sollte es gehen.

Wenn nicht solltest du dich mal mit der Klasse std::Vektor auseinander 
setzen. Dann du hast bis jetzt noch ein C Array.

von manni (Gast)


Lesenswert?

Ein paar weitere Möglichkeiten:
- Eindimensionales Array oder std::vector nehmen und Position selbst 
berechnen.

- Vektor aus Vektoren.

- Suche Dir eine Matrix-Klasse, davon gibt es genug.

von Dr. Sommer (Gast)


Lesenswert?

Peter II schrieb:
> wenn N*M Funktionsparameter sind, dann sollte es gehen.
Nur in C; Variable Length Arrays gibt es in C++ nicht (wobei manche 
Compiler das dennoch unterstützen).
Und die richtige Antwort ist std::vector:
1
#include <vector>
2
3
int myFunction (size_t N, size_t M) {
4
  std::vector<int> meinVektor (N*M);
5
}

von manni (Gast)


Lesenswert?

"Und die richtige Antwort ist std::vector:"

Nö, die "ganz richtige" Antwort ist eine Klasse, in der zwei Dimensionen 
konzeptionell vorgesehen sind ...

von manni (Gast)


Lesenswert?

Korrektur: Blödsinn, falsch gelesen. Sorry.

von Andreas (Gast)


Lesenswert?

Hallo,

das geht in C++ direkt ohne STL:
1
int *myarr = new int[x*y];
2
3
delete [] myarr;

Andreas

von Dr. Sommer (Gast)


Lesenswert?

Andreas schrieb:
> Hallo,
>
> das geht in C++ direkt ohne STL:
> int *myarr = new int[x*y];
>
> delete [] myarr;
>
> Andreas
Der std::vector macht im Endeffekt das selbe, stellt aber diverse 
Hilfsfunktionalität und vor allem automatisches Löschen zur Verfügung; 
C-Style Arrays ala "int*" sollte man so weit wie möglich in C++ 
vermeiden.

von ein c++ nutzer (Gast)


Lesenswert?

Frank schrieb:
> Hallo, ich möchte gerne einen Vektor erstellen, dessen länge variable
> ist. ICh habe die zwei variablen N und M. Diese sind immer
> unterschiedlich, mal 5,20,100 oder anders.
> Jetzt möchte ich gerne einen Vektor erstllen int Vektor[N*M];Da gibt er
> mir aber einen Fehler mit: Konstantenausdruck erwartet.
> Aber N*M bleibt ja konstant. Wenn die wieder geändert werden, soll er
> halt den Vektor neu berechnen
>
> Wie kann ich sonst den Vektor erstellen?

Entweder über den vector Datentyp:
1
#include <vector>
2
3
4
std::vector<int> myVector;
5
myVektor.resize(N*M);
6
7
// ab jetzt ganz normaler Zugriff wie auf C Arrays über Indexoperator
8
myVektor[4]=-1;
9
if(myVektor[4]==-1)
10
{
11
// usw ...
12
}

Oder über C Arrays, aber um Speicherlecks zu vermeiden sollte man noch 
eine Klasse rumbauen, die den Speicher sicher freigibt:
1
#include <boost/scoped_array.hpp> // oder so ähnlich, bin jetzt nicht sicher!
2
3
boost::scoped_array myVektor(new int[N*M]);
4
myVektor[4]=-1;
5
//usw...
6
// kein Löschen mit delete[] nötig, das erledigt boost::scoped_ptr für dich

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.