Dynamisk array

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Alpha II
    Medlem
    • 2000-05-20
    • 2579

    #1

    Dynamisk array

    Jag har en dynamisk array av min egedefinierad typ INIDATA. Hur gör jag för att lägga till ett 'object' till på arrayen?
  • PeW
    Medlem
    • 2000-06-20
    • 6839

    #2
    Allokerar mer (nytt) utrymme

    Comment

    • Alpha II
      Medlem
      • 2000-05-20
      • 2579

      #3
      Hur? Har försökt på lite olika sätt att göra det men akka försök resulterar i att programmet kraschar.

      Comment

      • Phorpher
        Medlem
        • 2000-02-08
        • 2059

        #4
        Ta en titt på funktionen realloc().

        Med den kan du allokera mer plats i en array. Dvs. du kan utöka storleken på din array med X antal bytes.

        Comment

        • Alpha II
          Medlem
          • 2000-05-20
          • 2579

          #5
          Jag får det inte att fungera!

          [kod]
          void INIFILE::SetKey(char *key, char *value)
          {
          int pos;
          if(KeyExist(key,&pos)==true)
          {
          strcpy(section_data[pos].value, value);
          }
          else
          {
          section_keys++;
          section_data = (INIDATA*) realloc(section_data, section_keys * sizeof(INIDATA));
          strcpy(section_data[section_keys].key,key);
          strcpy(section_data[section_keys].value,value);
          }
          }
          [/kod]

          Funderar på om det kanske vore smartare att använda sig av en länkadlista? Eller helt enkelt vara lat och använda färdig kod för att läsa och srkiva ini filer...

          Comment

          • PeW
            Medlem
            • 2000-06-20
            • 6839

            #6
            realloc är en funktion i ett C - lib, så det är bara dumt att blanda in den i C++. Länkad lista är kalas i ditt fall, alternativt allokera nytt med new men det känns onödigt då det redan finns så bra saker i STL

            Comment

            • Alpha II
              Medlem
              • 2000-05-20
              • 2579

              #7
              Får jag lov att programmera min länkadelist själv?

              Comment

              • PeW
                Medlem
                • 2000-06-20
                • 6839

                #8
                Nah! Kolla efter 'container' i STL-länken under relaterade länkar. Du kan ju exempelvis använda std::vector istället för list

                Comment

                • Alpha II
                  Medlem
                  • 2000-05-20
                  • 2579

                  #9
                  Så jag inkluderar 'vector' och skapar en vector genom att skriva 'vector<INIDATA> minvector;' ? Kompilatorn gillar inte mitt försök i alla fall

                  Comment

                  • Alpha II
                    Medlem
                    • 2000-05-20
                    • 2579

                    #10
                    Okej. Har lyckats få det att fungera nu och tror jag har kommit på hur vector fungerar

                    Har gjort om helt i min klass efter att ha insett att det blev alldeles för krångligt att göra som jag hade gjort.

                    Nu har jag ett nytt problem.
                    Hur sorterar jag vektorn i bokstavsordning efter 'section'?

                    [kod]
                    struct INIDATA
                    {
                    char section[256];
                    char key[256];
                    char value[256];
                    };
                    [/kod]

                    Comment

                    • PeW
                      Medlem
                      • 2000-06-20
                      • 6839

                      #11
                      Kolla vidare under STLs containers och på 'sort' och 'compare'. Finns nog en del frågor om detta redan på forumet så sök även här.

                      Comment

                      • Alpha II
                        Medlem
                        • 2000-05-20
                        • 2579

                        #12
                        Oh var lite förvirrad när jag skrev det där. Kom på att jag inte alls behövde sortera någonting. Min ini klass funkar hur bra som helst nu

                        Comment

                        • Tinwëlint
                          Medlem
                          • 2004-05-11
                          • 478

                          #13
                          Tar upp den här tråden igen då den handlade om precis det problem jag själv har.

                          Originally posted by PeW
                          realloc är en funktion i ett C - lib, så det är bara dumt att blanda in den i C++. Länkad lista är kalas i ditt fall, alternativt allokera nytt med new men det känns onödigt då det redan finns så bra saker i STL
                          Borde lära mig använda STL. Kan inte så mycket om det där.

                          Men om jag nu vill allokera nytt med new.

                          Jag har en array definierad som [KOD]user * users = new user[x][/kod] som medlem i min klass.

                          I en metod vill jag kunna lägga till ett nytt user-objekt i den. Jag har provat (världens fulaste metod?):


                          [kod]
                          //kopiera från users till tillfällig array: user * temp

                          delete [] users;

                          users = new user[nystorlek]

                          //kopiera från temp till users

                          [/kod]

                          Detta fungerar inte särskilt bra. Någon som kan ge mig något tips (förutom STL som jag inte kan sätta mig in i nu bara för den här skoluppgiften).

                          Först när konsumenten upplöser produkten, dubbar den produkten till produkt; ty produktionen är inte produkt som objektiverad aktivitet utan bara som objekt för det aktiva subjektet.

                          Blogg | Jag på Audioscrobbler | wF:s Audioscrobblergrupp

                          Comment

                          Working...