AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array redimensionieren

Ein Thema von EWeiss · begonnen am 10. Jun 2017 · letzter Beitrag vom 11. Jun 2017
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Array redimensionieren

  Alt 10. Jun 2017, 22:23
Delphi.

Delphi-Quellcode:
// Redim Array
if (Item + ID_MAIN) <> FlagFound then
begin
  if gP.ShortCutfound > 0 then
    NewLen := High(gS) + gP.ShortCutfound
  else
    NewLen := High(gS) + 1;

  Setlength(gS, NewLen);
  ShortCut.CreateRecycleBin(MainHandle, NewLen);
  for x := ID_FIRST to NewLen do
  begin
    gS[x] := gS[x + 1];
    if x = (NewLen - gP.ShortCutfound) then
    begin
      for X1 := (NewLen - 1) downto (NewLen - gP.ShortCutfound) do
        Delete(gS, X1);
    end;
  end;
  FlagFound := High(gS);
end;
wie bekomme ich Setlength nach c++ portiert ?
High(gS)
gibt es auch nicht. Hmmm....

gruss

Geändert von EWeiss (10. Jun 2017 um 22:49 Uhr)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Array redimensionieren

  Alt 11. Jun 2017, 00:47
C oder C++?

In C: realloc(void *ptr, size_t size). Ein Äquivalent zu high(...) gibt es glaube ich nicht. Hier musst du selbst einen Zähler mitführen.

In C++: std::vector<> verwenden. High(...) entspricht der Methode size()-1. SetLength(...) entspricht der Methode resize(...). Wenn du einfach nur ein Element am Ende anhängen willst, dann kannst du dir das manuelle Vergrößern aber auch sparen und einfach push_back(...) verwenden.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.069 Beiträge
 
Delphi 12 Athens
 
#3

AW: Array redimensionieren

  Alt 11. Jun 2017, 01:34
High(gS) im Delphi ist einfach nur Length-1, da dort die Arrays bei 0 beginnen.

Das ist in C nicht anders.
Beginnt das Array nicht bei 0, dann ist es eben Length+StartIndex-1
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Array redimensionieren

  Alt 11. Jun 2017, 03:00
Zitat:
Wenn du einfach nur ein Element am Ende anhängen willst, dann kannst du dir das manuelle Vergrößern aber auch sparen und einfach push_back(...) verwenden.
Nein das sind so viele Element wie Shortcuts auf dem Desktop liegen.

Zitat:
Beginnt das Array nicht bei 0, dann ist es eben Length+StartIndex-1
Ok Danke euch.

Da es sich um ein Statisches Array mit fester länge handelt (zu spät gesehen) kann ich mir das mit SetLength sparen.
Hab es jetzt so gemacht.

Code:
if (gP.shortcutfound > 0) { NewLen = nCount + gP.shortcutfound; }
else { NewLen = nCount + 1; }
CreateRecycleBin(gP.hMain, NewLen);

for (X = ID_FIRST; X <= NewLen; X++)
{
    gS[X] = gS[X + 1];

    if (X == (NewLen - gP.shortcutfound))
    {
        gS[nCount] = gS[NewLen];
        ZeroMemory(&gS[NewLen], sizeof(SpriteArray));
    }
}
FlagFound = nCount;
Die Icons die nicht in der Configurations Datei stehen muss ich bei der Berechnung aus dem Array ausschließen.
Damit sich nach dem speichern und neu laden das Papierkorb Icon auf seiner Position in der Bar nicht verändert.

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Array redimensionieren

  Alt 11. Jun 2017, 14:25
Zitat:
C oder C++?
Sorry ich hatte es angegeben.
Aber egal

gruss
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Array redimensionieren

  Alt 11. Jun 2017, 15:37
Zitat:
C oder C++?
Sorry ich hatte es angegeben.
Aber egal

gruss
Ich hatte nur noch mal nachgefragt, weil einige Delphianer das gerne mal durcheinanderschmeißen. Außerdem ist nicht wirklich klar, was unter C++ ein "Array" ist. Damit könnte ein C-style Array gemeint sein, aber auch ein std::vector.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Array redimensionieren

  Alt 11. Jun 2017, 15:39
Zitat:
C oder C++?
Sorry ich hatte es angegeben.
Aber egal

gruss
Ich hatte nur noch mal nachgefragt, weil einige Delphianer das gerne mal durcheinanderschmeißen.
Ach so
Kein Problem.

so wie ich weiß ist c <> makefile und C++ <> VS
es ist std::vector.

gruss

Geändert von EWeiss (11. Jun 2017 um 18:42 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz