dynamische arrays, was muss ich machen und wie geht das unter C++

Hi,
ich programmier nun schon seit jahren VB, aber in C++ hab ich net wirklich die Peilung, von der Syntax her zumindest, das programmierverständniss ist selbstverständlich vorhanden :)

Ich wollte fragen, wie ich unter C++ (Borland Builder 5) dynamische Arrays im nachhinein dimensionieren kann.
Sprich, wie ich festlege wieviele felder nun vorhanden sein sollen, und wie ich auch nur ein Feld jeweils hinzufügen kann.

Wie muss ich das Programmieren? Wie lauten hierfür die Befehle?
Kann mir da jmd helfen?

wäre euch dankbar für jede hilfe, vllt hat auch jmd hier eine nette seite für Einsteiger in C++ wie mich?

Thx mal und cya

VB_Freak_Goes_C
 
Arrays die du mit
Code:
int zahlen[20];
initialisierst sind statisch und von der Länge nicht mehr veränderbar.
Für solche Dinge wurde die dynamische Speicherverwaltung eingeführt.
Funktionen, die Du Dir in Deinem Buch mal anschauen solltest:
für Ansi C:
  • malloc
  • realloc
  • free
  • assert
für C++
  • new
  • delete
  • delete[]
Da alle diese Funktionen Grundlagen-programmierung erfordern, ist diese Arbeit recht aufwendig und fehleranfällig.
Für den Zweck der unbegrenzten und dynamischen "Arrays" wurden einige Datentypen in der Standard Template Library bereitgestellt, die mithilfe von Templates jeden beliebigen Typ (elementar/Struktur/Klasse) speichern können.
Beispiele hier
  • list
  • deque
  • vector
  • map

Auf jeden Fall hast Du noch Nachholebedarf was C++ anbelangt, da dynamische Speicherverwaltung zu den wichtigen Grundlagen gehört.
 
also erstmal danke für die schnelle antwort.

da ich ja aus der vb ecke kom, und das da nicht so explizit gefordert wird, speicherverwaltung und so weiter (VB macht das alles intern alleine), muss ich mich da wohl doch noch etwas mehr mit beschäfftigen.

Ich werde mir diese Funktioen und Methoden mal anschauen, danke dazu.


Eine andere frage hät cih da gerade noch, nicht das cih mich nun auslacht, aber wie überprüf ich ein Textfeld auf den inhalt, sodas nur zahlen drinstehen dürfen und wenn es Buchstaben sind, das dann eine Meldung kommt?

Also, der Befehl fehlt mir, für die Überprüfung auf zahlen.

In VB wäre das
IsNumeric()

Gruß
da umsteiga :)
 
Klar gibts die!
Benutze halt String als Datentyp.

Ansonsten, da Du das lernen sollst, einfach mal selber programmieren! Ist eigentlich nicht schwer.
 
hi,
ich glaub da hast du mich nun missverstanden.
ich mach grad was zum üben, und nun möcht ich aber, das bei einer eingabe von
Nicht Zahlen, also allem was keine Zahl ist, eine Unterscheidung getroffen wird

Also so:

If (TxtDez->Text== numerisch) //hier fehlt mir der befehl für die Abprüfung und ich finde dafür auch nix, ich will meinen Lehrer mal bisle beeindrucken ;)
{
....
}
else
{
Application->MessageBoxA ("Sie müssen einen gültigen Wert zur Berechnung eingeben","Dezimal-2-Dual",0);
}
 
...initialisierst sind statisch und von der Länge nicht mehr veränderbar.
Das stimmt so nicht ganz, denn man könnte das Array mit realloc neu "dimensionieren", allerdings muss man sich hier auch um den Inhalt und den Zeiger selbst kümmern.
Effizient ist das natürlich nicht.

Zum Thema auf Zahlen abprüfen, schreib dir doch selbst eine Funktion "bool IsNumeric(String)"
Die Zeichen für Zeichen überprüft.

Gruß Homer
 
Es gibt eine nette C-Funktion atoi Damit kann man char-arrays in integer umwandeln (atof machts in floats).
Wenn das Ergebnis 0 ist, dann ist entweder im char-array eine 0 oder es stehen nicht nur Zahlen drin.
 
Original geschrieben von Daniel Toplak
Das stimmt so nicht ganz, denn man könnte das Array mit realloc neu "dimensionieren", allerdings muss man sich hier auch um den Inhalt und den Zeiger selbst kümmern.
Effizient ist das natürlich nicht.

Zum Thema auf Zahlen abprüfen, schreib dir doch selbst eine Funktion "bool IsNumeric(String)"
Die Zeichen für Zeichen überprüft.

Gruß Homer

Und dann biste aufgewacht? Schonmal realloc auf dem Stack angewendet? Oder gar auf Statischem Speicher? Soll ich dir sagen was Realloc da macht? Da fliegt dir Realloc um dir Ohren! meines Wissens gibt das AccessViolationException also 0xC0000005...

Du kannst noch nicht einen Speicherbereich der zwischen code in einem Programm rumliegt, einfach um n stück erweitern ohne des Gesamten code Relozieren zu müssen. ähnlich sieht es mit dem Stack aus... Kein einziger Pointer auf Speicher nach diesem einem Element auf dem Stack währe mehr gültig wenn das ginge... Ja nichmal mehr auf Parameter einer Funktion könntest du zugreifen!

also überleg dir das nochmal...
 
Vielleicht meinte er auch die Daten vom Stack in ein längenangepasstes dynamisches Feld zu verfrachten :rolleyes:
Allerdings sollte man auch dazu NICHT raten!
 
wenn ihr mir eben sagen könntet wie die Methode zur Überprüfung auf Zahlen in einem Textfeld lautet wäre mir schon sehr geholfen.

Danke.

@Daniel Toplak
Zum Thema auf Zahlen abprüfen, schreib dir doch selbst eine Funktion "bool IsNumeric(String)"


Sorry, aber ich hab grad mal in C++ mitbekommen, wie ich nun mal die steuerelemente anspreche, Programmieren kann ich, aber die C Syntax und Befehle sind mir einfach noch nicht geläufig.
bin ein C++ neuling/anfänger .
In VB mach ich dir sowas mit Links.
 

Neue Beiträge

Zurück