Vektor mit variablen erstellen c++

Gast #3485505
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?
Gast #3485574
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
}
Gast #3485616
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.
Gast #3494850
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren