Forum huvudsida -> Programmering -> List med en strukt som datatyp
Sidor: 1
seal | 22:55 - 6:e December 2007 | Post #1 | |
Medlem Inlägg: 32 Skicka PM |
Hejsan, håller på att läsa på lite om lister. Detta verkar vara bättre än arrays i mitt fall då jag behöver lägga till poster under kodens gång. Jag har en strukt:
Jag vill skapa en list med denna datatyp
Men hur fungerar detta? Om det fungerar alls? Jag fick inga felmeddelanden när jag lade till en struct som datatyp så jag antar att det är möjligt. Hittade inget om just detta. Tack åter igen på förhand :-) . |
Independence | 23:37 - 6:e December 2007 | Post #2 | |
Administratör Inlägg: 1800 Skicka PM |
Vad är det du frågar egentligen? Du testade, och det funkade? ------------------------- Vi är riddarna som säger fiskbulle! |
tobbez | 00:41 - 7:e December 2007 | Post #3 | |
Medlem Inlägg: 364 Skicka PM |
Det fungerar utmärkt. Hur det fungerar? Ett exempel:
Lite extra kommentarer om sådant som kan vara oklart:
Man kan även gå igenom listor som om de vore arrayer, även om det är föredraget att använda iteratorer:
Och i allmänna fallet är det bra att hjälp av referenssidor (som till exempel http://cppreference.com/cpplist/index.html ) när man vill veta hur något fungerar. Edit: Språkfixar. Senast redigerad 12:53 - 7:e December 2007 |
seal | 11:22 - 7:e December 2007 | Post #4 | |
Medlem Inlägg: 32 Skicka PM |
Tusen tack tobbez, tillbaka till kodandet :-) . |
NetNinja | 21:24 - 7:e December 2007 | Post #5 | |
Medlem Inlägg: 116 Skicka PM |
Wow, jag viste inte man kunde använda konstruerare till structs, coolio. -------------------------
|
seal | 11:47 - 8:e December 2007 | Post #6 | |
Medlem Inlägg: 32 Skicka PM |
Hej igen, testar lite med lister nu och har stött på ett problem. Jag har en lista med datatyp: minklass * En pekare till denna klass alltså. När jag lägger till ett listitem så använder jag push_back(new minklass(argument)) so far so good, men när jag använder new så måste jag ta bort dessa, med delete då. Så jag testade detta:
,,r det inte så det fungerar? Jag får programfel och att jag måste avsluta programmet, jag antar att jag försöker ta bort ett objekt som inte finns eller liknande? |
Independence | 12:25 - 8:e December 2007 | Post #7 | |
Administratör Inlägg: 1800 Skicka PM |
En gissning är att du ska ta bort det första elementet hela tiden, eftersom listan krymper när du tar bort ett element. Så halvvägs igenom börjar den försöka ta bort element som inte finns eller så. Dock så borde det väl finnas något sätt att ta bort hela listan med en gång? ------------------------- Vi är riddarna som säger fiskbulle! |
seal | 12:42 - 8:e December 2007 | Post #8 | |
Medlem Inlägg: 32 Skicka PM |
Citat av Independence:En gissning är att du ska ta bort det första elementet hela tiden, eftersom listan krymper när du tar bort ett element. Så halvvägs igenom börjar den försöka ta bort element som inte finns eller så. Kan jag vända loopen och ta bort dem bakifrån? Eller något annat förslag hur jag skall gå tillväga? hur jag tar bort hela listen, jag trodde att iom att för varje listitem gör jag en new så behöver jag ta bort varje listitem för sig. |
Independence | 13:11 - 8:e December 2007 | Post #9 | |
Administratör Inlägg: 1800 Skicka PM |
Hm, det kanske var jag som tänkte på fel sak ändå. Du tar bara bort det du new:at, inte själva elementet i listan? ------------------------- Vi är riddarna som säger fiskbulle! |
Slash | 15:18 - 8:e December 2007 | Post #10 | |
Medlem Inlägg: 141 Skicka PM |
Citat av seal:
Det där borde ju fungera, kan det vara något med destrureraren? ------------------------- Ingen sigantur! |
seal | 17:00 - 8:e December 2007 | Post #11 | |
Medlem Inlägg: 32 Skicka PM |
Jag löste det, det var så att jag även i detta lade till en referans till ett objekt utan att använda new, och denna blev det alltså 2 delete på som den inte gillade. Tack i alla fall :-) . |
seal | 15:20 - 9:e December 2007 | Post #12 | |
Medlem Inlägg: 32 Skicka PM |
Hej igen, nu har jag ett nytt problem. Denna gång inte med en list utan en array. Såhär ligger det till, jag har en array på 16 i storlek, ( SDL_Surface *arrName[16]), detta är en pekare till SDL_Surface som ni ser. I denna array lägger jag till en pekare till ett nytt surface objekt (om jag gjort det rätt):
So far so good.. Problemet är åter igen när jag ska köra delete på de poster i arrayen som är fyllda, i konstruktorn så sätter jag värde på alla poster (värde - 0). Såhär ser loopen ut som ska deleta:
Får programfel :-) . Tacksam åter igen för svar! |
Nissebosselasse | 17:11 - 9:e December 2007 | Post #13 | |
Medlem Inlägg: 490 Skicka PM |
Använd en vanlig std::vector istället, det är samma tillvägagångssätt som en std::list som du precis använt. ------------------------- http://pushingcows.se Gula Nallen |
seal | 17:17 - 9:e December 2007 | Post #14 | |
Medlem Inlägg: 32 Skicka PM |
Citat av Nissebosselasse:Använd en vanlig std::vector istället, det är samma tillvägagångssätt som en std::list som du precis använt. Jasså, varför ska jag använda en sådan? Vad är skillnaden mellan en vector och en array (förutom att man med en vector inte behöver sätta in storleken när man definerar). Sedan löste jag problemet, kom på att jag inte ska köra delete på denna utan SDL_FreeSurface. |
tobbez | 01:36 - 11:a December 2007 | Post #15 | |
Medlem Inlägg: 364 Skicka PM |
Vill bara påminna om att efter den här koden:
är det god sed att köra listWorm.clear(), så man inte försöker referera till det avallokerade minnet senare (av misstag). Det här gäller även arrayen, sätt arrPics[i] = NULL; efter att du friat minnet den pekar på. |
Sidor: 1
Forum huvudsida -> Programmering -> List med en strukt som datatyp
Du får inte posta i den här tråden | Till toppen
Datum
2024-05-04 16:21
Vecka: 18
Besökare
Inloggade: 0
Gäster: 605
Medlemmar
Medlemmar: 53576
Forum
Senaste inlägget: HAHA MÄNNISKAN LEVER ÄN (13:45 - 18:e Januari 2019, av Hetzz)
Wiki
Senaste ändringen:
3D (rev: 1, tid: 09:40 - 13:e November 2015)
Chatt
#blinkenlights @ Libera.Chat
Gratis shellkonton för IRC, webbsidor mm.