Forum: Arrayer utan bestämd storlek

Forum huvudsida -> Programmering -> Arrayer utan bestämd storlek

Sidor: 1

Till botten

seal 21:29 - 25:e November 2007 | Post #1
Medlem
Inlägg: 32


Skicka PM
Ursäka att jag är tjatig och skriver mycket.

Jag har läst på om arrays, och jag vill göra en array som inte har en bestämd storlek. Det ska vara en multidimitionell array.

Har sett i exempel att de skrivit:
int arrInt[]
Men när jag skriver så får jag ett felmedd. i dev c++ att jag inte bestämmt storleken.

Har också tittar på vektorer, men att få dessa multidimitionella förstår jag mig inte på.




Fasting 00:15 - 26:e November 2007 | Post #2
Medlem
Inlägg: 121


Skicka PM
Nu vet jag inte i vilket fall du ska använda dig av det men om du vet hur stor den ska vara innan den ska användas kan du skicka med storleken som ett argument till en annan funktion där argumentet används som storlek.

Exempel där main() tar in storleken som ett argument:
  1. #include <iostream>
  2.  
  3. int main( int argc, char * argv[]) {
  4. int x = atoi(argv[1]);
  5. int array[x];
  6.  
  7. for( int i=0; i<x; i++) {
  8. array[i] = i*2+3;
  9. std::cout << i << " : " << array[i] << std::endl;
  10. }
  11. }


Resultat:
fasting$ ./array 5
0 : 3
1 : 5
2 : 7
3 : 9
4 : 11


Kanske ett bättre exempel:
  1. #include <iostream>
  2.  
  3. void function( int x) {
  4. int array[x];
  5.  
  6. for( int i=0; i<x; i++) {
  7. array[i] = i*2+3;
  8. std::cout << i << " : " << array[i] << std::endl;
  9. }
  10. }
  11.  
  12. int main() {
  13. int size;
  14.  
  15. std::cout << "Skriv in ett tal: ";
  16. std::cin >> size;
  17.  
  18. function( size);
  19. }


-------------------------
Efter att ni har läst det här har ni insett att det inte gav något.

Senast redigerad 00:26 - 26:e November 2007


Nissebosselasse 01:09 - 26:e November 2007 | Post #3
Medlem
Inlägg: 490


Skicka PM
Fasting: följer det där verkligen standarden? Såvitt jag vet måste det vara ett konstant uttryck mellan hakparanteserna när du skapar vektorer, t.ex.:
  1. const int storlek = 10;
  2. int min_vektor[storlek];

Däremot kan du ju skapa det med new; då behövs ingen kostant:
  1. std::cout << "Hur många? ";
  2. int antal = 0;
  3. std::cin >> antal;
  4. int *vektor = new int[antal];
  5.  
  6. // Glöm inte ta bort...
  7. delete [] vektor;


seal: Multidimensionella arrays kan bli lite knepiga att hantera. Det finns färdiga lösningar för det här, bland annat Boost: http://www.boost.org/libs/multi_array/doc/index.html.
Annars kan du läsa mer här: http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.16

-------------------------
http://pushingcows.se
Gula Nallen



Fasting 01:19 - 26:e November 2007 | Post #4
Medlem
Inlägg: 121


Skicka PM
    Citat av Nissebosselasse:
Fasting: följer det där verkligen standarden?

Det vet jag inte men det funkar iaf. Allt som funkar funkar \o/

-------------------------
Efter att ni har läst det här har ni insett att det inte gav något.



Nissebosselasse 09:53 - 26:e November 2007 | Post #5
Medlem
Inlägg: 490


Skicka PM
    Citat av Fasting:
    Citat av Nissebosselasse:
Fasting: följer det där verkligen standarden?

Det vet jag inte men det funkar iaf. Allt som funkar funkar \o/


Fungerar inte vare sig i Visual C++ (2003) eller Borland C++ 5.5 ("Constant expression required"). Vilken kompilator använder du? GCC? Hittade följande nämligen: http://gcc.gnu.org/onlinedocs/gcc-3.0/gcc_5.html#SEC80


-------------------------
http://pushingcows.se
Gula Nallen



Fasting 10:37 - 26:e November 2007 | Post #6
Medlem
Inlägg: 121


Skicka PM
Använder GCC ja. Har ingen annan kompilator tillgänglig så har inte kunnat testa någon annan som du gjort.

Exemplet jag skrev har fungerat i andra språk (ex. Ada) och därför skrev jag det just såSmiley

-------------------------
Efter att ni har läst det här har ni insett att det inte gav något.



seal 16:56 - 26:e November 2007 | Post #7
Medlem
Inlägg: 32


Skicka PM
    Citat av Nissebosselasse:
Fasting: följer det där verkligen standarden? Såvitt jag vet måste det vara ett konstant uttryck mellan hakparanteserna när du skapar vektorer, t.ex.:
  1. const int storlek = 10;
  2. int min_vektor[storlek];

Däremot kan du ju skapa det med new; då behövs ingen kostant:
  1. std::cout << "Hur många? ";
  2. int antal = 0;
  3. std::cin >> antal;
  4. int *vektor = new int[antal];
  5.  
  6. // Glöm inte ta bort...
  7. delete [] vektor;


seal: Multidimensionella arrays kan bli lite knepiga att hantera. Det finns färdiga lösningar för det här, bland annat Boost: http://www.boost.org/libs/multi_array/doc/index.html.
Annars kan du läsa mer här: http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.16


Okej, för att du ska se lite vad jag ska göra så kan jag förklara kort, och kanske ge mig tips på en bättre lösning.

Jag har en klass som har hand om bilder (objekt) som jag lägger i min Surface (SDL). I denna funktion tänkte jag lägga till x, y, w, h på alla objekt i en array. Dessa använder jag sedan när jag ska kolla om karaktären kolliderar i något av dessa objekt. Karaktären är då orörbar.

Detta tänkte jag göra som så att jag loopar alla poster i en array, kollar om jag har kolliderat och returnerar true eller false beroende på resultat.

EDIT;
En grej kanske vore att göra en "vanlig" array, eller vektor kanske blir bäst då jag inte kan bestämma storleken, så lägger jag in alla kordinater coh separerar med ett tecken (ex, |). Men då till nästa problem, jag har försökt innan men har inte lyckats "exploda" en array, separera den.

Några tips på det kanske?

Tack så mycket på förhand!


Senast redigerad 16:57 - 26:e November 2007


Smygis 16:58 - 26:e November 2007 | Post #8
Medlem
Inlägg: 90


Skicka PM
std::vector någon?

-------------------------
Ingen signatur! <- OMG! Jag har inte någon signatur! Ge mig en signatur FFS!



seal 17:26 - 26:e November 2007 | Post #9
Medlem
Inlägg: 32


Skicka PM
    Citat av Smygis:
std::vector någon?


Läste du hela mitt inlägg?

Har också tittar på vektorer, men att få dessa multidimitionella förstår jag mig inte på.





Smygis 18:01 - 26:e November 2007 | Post #10
Medlem
Inlägg: 90


Skicka PM
    Citat av seal:
    Citat av Smygis:
std::vector någon?


Läste du hela mitt inlägg?

Har också tittar på vektorer, men att få dessa multidimitionella förstår jag mig inte på.


Typ inte.

  1. #include <iostream>
  2. #include <vector>
  3.  
  4. int main()
  5. {
  6. std::vector< std::vector<int> > array2d;
  7.  
  8. array2d.resize(10);
  9. for(int i=0; i < array2d.size(); i++)
  10. {
  11. for(int k=0; k < 10; k++)
  12. {
  13. array2d[i].push_back(k);
  14. }
  15. }
  16. for(int c=0; c < array2d.size(); c++)
  17. {
  18. std::cout << "[";
  19. for(int e=0; e < array2d[c].size(); e++)
  20. {
  21. std::cout << array2d[c][e] << ",";
  22. }
  23. std::cout << "]" << std::endl;
  24. }
  25. return 0;
  26. }


Output:

[0,1,2,3,4,5,6,7,8,9,]
[0,1,2,3,4,5,6,7,8,9,]
[0,1,2,3,4,5,6,7,8,9,]
[0,1,2,3,4,5,6,7,8,9,]
[0,1,2,3,4,5,6,7,8,9,]
[0,1,2,3,4,5,6,7,8,9,]
[0,1,2,3,4,5,6,7,8,9,]
[0,1,2,3,4,5,6,7,8,9,]
[0,1,2,3,4,5,6,7,8,9,]
[0,1,2,3,4,5,6,7,8,9,]



-------------------------
Ingen signatur! <- OMG! Jag har inte någon signatur! Ge mig en signatur FFS!

Senast redigerad 18:03 - 26:e November 2007


Sidor: 1

Forum huvudsida -> Programmering -> Arrayer utan bestämd storlek
Atom feed

Du får inte posta i den här tråden | Till toppen